我有 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() {
}
------
}
Run Code Online (Sandbox Code Playgroud)
当我尝试保留一些 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)
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
如果数据库平台不支持 IDENTITY,则 IDENTITY 将默认为 TABLE。
对于 TABLE,您需要创建一个序列表。如果您让 ElipseLink 创建您的表,它将自动为您创建,否则您需要自己创建它。
如果 SQlite 具有 IDENTITY 支持,那么您可以创建自己的 DatabasePlatform 子类来添加身份支持。
一般来说,我永远不会推荐使用 IDENTITY,它不支持预分配并且会导致性能不佳。
归档时间: |
|
查看次数: |
4733 次 |
最近记录: |