我正在使用Hibernate和SQLite数据库。我有以下类:休眠插入单列表问题
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Authority {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idAuthority;
(...)
然后,我有一个作者类,它扩展权限并添加4或5个字段。 当我试图保存Author对象时,Hibernate会生成以下要求:
Hibernate: insert into Authority values ()
和SQLite不喜欢这样。
如果我添加一个虚拟的字符串字段,如“私人字符串测试”,并在构造函数中设置此属性,一切工作正常。
我是hibernate的新手,所以我不确定如何继续。你有什么主意吗 ?
编辑:按照要求,Author类的映射:
@Entity
@Table(name="Authors")
@PrimaryKeyJoinColumn(name="idAuthority")
public class Author extends Authority {
@Column(name = "firstName")
protected String firstName;
@Column(name = "lastName")
protected String lastName;
@Column(name = "alias")
protected String alias;
(...)
}
编辑:作为请求(之二),该插入的代码:
public void save(Object data) {
currentSession.saveOrUpdate(data);
}
没什么特别.. 为了给你更多可能的线索,下面是数据库模式:
create table Authority (idAuthority integer, primary key (idAuthority))
create table Authors (alias varchar, firstName varchar,
lastName varchar, idAuthority bigint not null, primary key (idAuthority))
N.B. :在SQLite中,一个主键整数自动设置为AUTO-INCREMENT。
引发的异常,这是一个:
java.sql.SQLException: near ")": syntax error
请求应该更像:插入管理局值(NULL)让SQLite的做它的自动递增,而不是这种怪异的“插入管理局值( )”。
编辑:这是SqlLite for Hibernate包定义的一个问题。我只是想用HSQLDB,它给了我一个正确的查询:
insert into Authority (idAuthority) values (default)
(然后失败过,但非常不同的原因:P)。
我不确定是否有解决这个问题的办法......除了使用不同的数据库。
粘贴作者的映射,所以我们可以看到它,谢谢 – ssedano
你能PLZ尝试使'idAuthority'公共(类'Authority')? – Santosh
@Santosh:试过了,但没有奏效。 – Raveline