我对 JPA 和 SQlite 有疑问。
我已经从表创建了一个实体。我生成的实体如下所示:
@Entity
@Table(name="sqliteTestTable")
public class Test implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="name")
private String name;
public Test() {
}
------
}
当我尝试保留一些测试对象时,出现以下错误:
(我在mysql上执行相同的代码没有问题)
Exception in thread "main" Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.1.v20121003-ad44345): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: no such table: SEQUENCE
Error Code: 0
Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
bind => [50, SEQ_GEN_TABLE]
Query: DataModifyQuery(name="SEQ_GEN_TABLE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?")
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)
我怎么解决这个问题?
如果数据库平台不支持 IDENTITY,则 IDENTITY 将默认为 TABLE。
对于 TABLE,您需要创建一个序列表。如果您使用 ElipseLink 创建表,它将自动为您创建,否则您需要自己创建。
如果 SQlite 有 IDENTITY 支持,那么您可以创建自己的 DatabasePlatform 子类来添加身份支持。
一般来说,我永远不会推荐使用 IDENTITY,它不支持预分配,并且会导致性能不佳。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)