Java Hibernate插入与单列表问题
我正在使用Hibernate和SQLite数据库。我有以下课程:Java Hibernate插入与单列表问题,java,hibernate,sqlite,Java,Hibernate,Sqlite,我正在使用Hibernate和SQLite数据库。我有以下课程: @Entity @Inheritance(strategy=InheritanceType.JOINED) public abstract class Authority { @Id @GeneratedValue(strategy=GenerationType.AUTO) private int idAuthority; (...) 然后我有一个类作者,它扩展了权限并添加了4或5个字段。 当我尝试保存
@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不喜欢这样
如果我添加一个伪字符串字段,比如private String test,并在构造函数中设置这个属性,那么一切正常
我对冬眠还不太熟悉,所以我不知道如何继续。你知道吗
编辑:根据请求,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))
注意:在SQLite中,主键的整数自动设置为自动递增
提出的例外情况如下:
java.sql.SQLException: near ")": syntax error
请求应该更像:insert-into-Authority-values为NULL,以允许SQLite自动递增,而不是这种奇怪的插入到Authority-values中
编辑:这显然是SQLLiteforHibernate包的一个问题。我刚刚试过Hsqldb,它给了我一个正确的查询:
insert into Authority (idAuthority) values (default)
然后它也失败了,但原因非常不同:p
我不确定这个问题有没有解决办法。。。除了使用其他数据库。如果使用InheritanceType.com,则与类权限关联的表必须包含与idAuthority关联的列,而与类作者关联的表必须包含与idAuthority关联的列,该列是表示权限的表中主标识符的外键。如果使用InheritanceType,则表关系关联必须包含该属性。与类权限关联的表必须包含与idAuthority关联的列,而与类作者关联的表必须包含与idAuthority关联的列,该idAuthority是表中显示的主标识符的外键权威表关系关联需要它请尝试覆盖该ID
@Entity
@Table(name="Authors")
@PrimaryKeyJoinColumn(name="idAuthority")
@AttributeOverride(name="idAuthority", column=@Column(name="id"))
public class Author extends Authority {
@Column(name = "firstName")
protected String firstName;
@Column(name = "lastName")
protected String lastName;
@Column(name = "alias")
protected String alias;
(...)
}尝试覆盖ID
@Entity
@Table(name="Authors")
@PrimaryKeyJoinColumn(name="idAuthority")
@AttributeOverride(name="idAuthority", column=@Column(name="id"))
public class Author extends Authority {
@Column(name = "firstName")
protected String firstName;
@Column(name = "lastName")
protected String lastName;
@Column(name = "alias")
protected String alias;
(...)
}粘贴作者的映射,这样我们就可以看到它了,谢谢。请尝试将idAuthority设置为类权限中的公共权限?@Santosh:尝试过,但没有成功。添加插入的示例代码,用完IDEA粘贴作者的映射,这样我们就可以看到它了,谢谢,请尝试将idAuthority作为类权限中的公共权限?@Santosh:尝试过,但不起作用。添加插入的示例代码,用完IDEA也不起作用,但我不确定我是否做对了。重写是在Author类中完成的,对吗?尝试这种方式,它不起作用,它仍然向Authority中插入一个空值。但我学会了这个属性,多亏了你:也没用,但我不确定我做对了。重写是在Author类中完成的,对吗?尝试这种方式,它不起作用,它仍然向Authority中插入一个空值。但多亏了你,我才学会了这一点: