【发布时间】:2011-09-26 23:55:07
【问题描述】:
我正在使用带有 SQLite 数据库的 Hibernate。我有以下课程:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Authority {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idAuthority;
(...)
然后我有一个 Author 类,它扩展了 Authorization 并添加了 4 或 5 个字段。 当我尝试保存 Author 对象时,Hibernate 会生成以下请求:
Hibernate: insert into Authority values ( )
而 sqlite 不喜欢这样。
如果我添加一个虚拟字符串字段,如“私有字符串测试”并在构造函数中设置此属性,一切正常。
我对休眠很陌生,所以我不确定如何继续。你有什么想法吗?
编辑:根据要求,作者类的映射:
@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 中,作为主键的整数会自动设置为 AUTO-INCREMENT。
引发的异常是这个:
java.sql.SQLException: near ")": syntax error
请求应该更像:插入权限值(NULL)以让 SQLite 进行自动增量,而不是这种奇怪的“插入权限值()”。
编辑:这绝对是 SqlLite for Hibernate 包的问题。我刚刚尝试使用 Hsqldb,它给了我一个正确的查询:
insert into Authority (idAuthority) values (default)
(然后它也失败了,但原因非常不同:p)。
我不确定这个问题是否有解决方案...除了使用不同的数据库。
【问题讨论】:
-
贴上作者的映射,方便大家看到,谢谢
-
你能不能把
idAuthority设为公开(在课堂上Authority)? -
@Santosh :试过了,但没用。
-
添加insert的示例代码,没有思路