gpt4 book ai didi

java - 单元工作克隆 sqlite 中的主键为空或零

转载 作者:行者123 更新时间:2023-11-30 11:02:09 25 4
gpt4 key购买 nike

你好,我有一个关于 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() 有一个执行。异常说

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 的帮助。您给出的最后一个答案对我有帮助。我必须生成新的数据库并将自动增量参数添加到我的主键中。然后生成sqlite_sequence表。现在我可以通过 JPA 在我的数据库中插入实体而不会出现任何异常。

这是我的生成器注释:

@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 开始。

关于java - 单元工作克隆 sqlite 中的主键为空或零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30899609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com