您好我有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(catName);
em.getTransaction().begin();
em.persist(cat);
em.flush();
em.getTransaction().commit();
}
现在我在em.flush()上有一个Execption。 例外说
Null or zero primary key encountered in UnitOfWork clone
我知道这是因为Object cat而发生的。 catID仍为null。 该课程如下:
@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会自动增加主键。如何在不收到此异常的情况下通知我的程序主键运行?
答案 0 :(得分:1)
谢谢Mick Mnemonic的帮助。你给出的最后一个答案对我有帮助。 我必须生成我的数据库new并将autoincrement Argument添加到我的主键。然后生成sqlite_sequence表。现在我可以通过JPA在我的数据库中插入实体而不会出现任何异常。
这是我的生成器注释:
@GeneratedValue(generator="sqlite")
@TableGenerator(name="sqlite", table="sqlite_sequence",
pkColumnName = "name", valueColumnName = "seq",
pkColumnValue = "Section", initialValue = 1,
allocationSize = 1)
最后两个参数是必要的,因为jpa似乎在sqlite_seq表中添加了+50,而SQLite在1处开始自动增量值。