gpt4 book ai didi

java - Hibernate insert with single column table 问题

转载 作者:行者123 更新时间:2023-11-29 09:19:06 24 4
gpt4 key购买 nike

我将 Hibernate 与 SQLite 数据库结合使用。我有以下类(class):

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Authority {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idAuthority;
(...)

然后我有一个 Author 类,它扩展了 Authority 并添加了 4 或 5 个字段。当我尝试保存 Author 对象时,Hibernate 生成以下请求:

 Hibernate: insert into Authority values ( )

而 sqlite 不喜欢那样。

如果我添加一个虚拟字符串字段,如“private String test”,并在构造函数中设置此属性,一切正常。

我对 hibernate 还很陌生,所以我不确定如何进行。你有什么想法吗?

编辑:根据要求,作者类的映射:

@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;
(...)
}

编辑:根据要求(bis),插入代码:

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 中,作为主键的整数会自动设置为 AUTO-INCREMENT。

引发的异常是这个:

java.sql.SQLException: near ")": syntax error

请求应该更像是:insert into Authority values (NULL) 让 SQLite 做它的自动递增,而不是这个奇怪的“insert into Authority values ()”。

编辑: 这绝对是 SqlLite for Hibernate 包的问题。我刚刚尝试使用 Hsqldb,它给了我一个正确的查询:

insert into Authority (idAuthority) values (default)

(然后它也失败了,但是出于非常不同的原因 :p )。

我不确定这个问题是否有解决方案...除了使用不同的数据库。

最佳答案

如果您使用 InheritanceType.JOINED,则与 Authority 类关联的表必须包含与 idAuthority 关联的列,并且与 Author 类关联的表必须包含与 idAuthority 关联的列,它是主标识符的外键在显示权限的表中。表关系关联需要它

关于java - Hibernate insert with single column table 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com