Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate插入与单列表问题_Java_Hibernate_Sqlite - Fatal编程技术网

Java Hibernate插入与单列表问题

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个字段。 当我尝试保存

我正在使用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不喜欢这样

如果我添加一个伪字符串字段,比如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中插入一个空值。但多亏了你,我才学会了这一点: