gpt4 book ai didi

java - 为什么 JPA persist() 不生成自增主 ID?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:03:29 26 4
gpt4 key购买 nike

我正在使用 JPA toplink-essentialSQL Server 2008

我的目标是获取将要插入到表中的数据的自动递增主键值。我知道在 JDBC 中,有类似 getInsertedId() 的方法可以为您提供自动递增主 ID 的 ID(但那是在插入语句执行之后)

在 JPA 中,我发现 @GenratedValue 注释 可以解决这个问题。

@Entity
@Table(name = "tableOne")
public class TableOne implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "tableId")
private Integer tableId;

现在,如果我运行下面的代码,它应该给我自动递增的 id 但它返回 NULL...

 EntityManager em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager();
EntityTransaction txn = em.getTransaction();
txn.begin();

TableOne parent = new TableOne();
em.persist(parent); //here I assume that id is pre-generated for me.
System.out.println(parent.getTableId()); //this returns NULL :(

最佳答案

问题是您正在使用 IDENTITY id 生成。 IDENTITY id 生成不能进行预分配,因为它们需要 INSERT 来生成 id。 TABLE 和 SEQUENCE id 生成支持预分配,我总是建议使用这些,并且永远不要使用 IDENTITY,因为这个问题和性能。

使用IDENTITY id生成时可以调用flush()触发生成id。

关于java - 为什么 JPA persist() 不生成自增主 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4870863/

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