Java 单位工作克隆sqlite中的主键为Null或零
您好,我对JPA和SQLite有问题 我在SQLite中有一个名为Category的表。这是此表的结构:Java 单位工作克隆sqlite中的主键为Null或零,java,sqlite,jpa,Java,Sqlite,Jpa,您好,我对JPA和SQLite有问题 我在SQLite中有一个名为Category的表。这是此表的结构: Category: catID INTEGER Primary Key catName TEXT 现在我正试图通过JPA插入一个新类别。 这是我的方法: public void insertCategory(EntityManager em, String catName) { Category cat = new Category(); cat.setCatName(ca
Category:
catID INTEGER Primary Key
catName TEXT
现在我正试图通过JPA插入一个新类别。
这是我的方法:
public void insertCategory(EntityManager em, String catName) {
Category cat = new Category();
cat.setCatName(catName);
em.getTransaction().begin();
em.persist(cat);
em.flush();
em.getTransaction().commit();
}
现在我在em.flush()上有一个执行选项。
例外情况是
Null or zero primary key encountered in UnitOfWork clone
我知道这是因为对象猫。catID仍然为空。
该类看起来像:
@Entity
@Table(name="Category")
public class Category implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name="catName")
private String catName;
@Id
@Column(name="catID")
private Integer catID;
+ Getter and Setter
}
当查询中没有给出主键时,SQLite会自动递增主键。如何在不出现此异常的情况下通知程序要运行的主键???谢谢Mick Mnemonic的帮助。你最后的回答帮助了我。 我必须生成新的数据库,并将autoincrement参数添加到主键中。然后生成sqlite_序列表。现在我可以通过JPA在数据库中插入Entitys,而不会出现任何异常 这是我的生成器注释:
@GeneratedValue(generator="sqlite")
@TableGenerator(name="sqlite", table="sqlite_sequence",
pkColumnName = "name", valueColumnName = "seq",
pkColumnValue = "Section", initialValue = 1,
allocationSize = 1)
最后两个参数是必需的,因为jpa似乎将+50添加到sqlite_seq表中的值,sqlite从1开始自动递增值。可能会有所帮助。我尝试过这个解决方案,但后来我变成了异常SQL错误或缺少数据库(没有这样的表:序列)。我认为这对SQLite不起作用。请尝试使用
@GeneratedValue
(不带参数)简单地注释catID
。Sequence是Oracle的一个概念。这给了我和以前一样的异常好吧,看来SQLite有点特别。有一个建议你可以试试。我想顺便说声谢谢,因为这有助于我解决Java项目中经常遇到的一个问题。我建议用一个示例实体发布一个修订版,以便后面的其他用户可以看到这些注释应该放在哪里。