java - 如何在 tx 提交之前获取添加到 JPA 关系的新实体的主键?

标签 java hibernate jpa

假设我有一个如下所示的 JPA 实体,为简单起见,省略了完整的注释详细信息

@Entity
public class Order {
   @Id Integer id; 

   @OneToMany List<Parts> parts;          
}

@Entity
public class Part {
   @Id Integer id; 

   @ManyToOne Order order;
}

假设我正在向现有订单添加新零件

Order order = entityManager.find(Order.class,1);
Part newPart  = new Part();
newPart.setOrder(order);
order.getParts().add(part);
// set other part fields

Integer newPartId = newPart.getId();  // newPartId is null 

有没有一种方法可以获取新添加项目的 id,而无需在实体管理器上显式调用 persist() 或等到当前 tx 提交之后?

最佳答案

按照 Andrei 的回答所述修复映射后,保留您的实体,然后在 EntityManager 上调用 flush(),然后从实体获取 ID。

Hibernate 不会为它甚至不知道的非持久实体生成 ID。

关于java - 如何在 tx 提交之前获取添加到 JPA 关系的新实体的主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20199490/

相关文章:

java - 在 Android 中组合整数常量是如何工作的?

java - 如何使在 try block 中声明的最终变量在 catch/finally block 中使用?

java - 滚动 GridView 导致 GC_FOR_ALLOC 释放问题

java - 使用 JPA Criteria 查询 API 进行多对多示例

java - 如何使用 Hibernate 作为持久性提供程序在 JPA 中添加 "outer join conditions with ON clause"?

java - 有没有一种方法可以将字符串的某些部分逐步设置为数组? ( java )

java - Spring JPA 存储库删除方法不起作用

java - 您如何告诉 Hibernate 您的实体类映射采用 JPA 1.0 语法?

java - 使用 JPA hibernate ,连接时间非常慢

java - 如何以编程方式配置事务类型 ="JTA"(没有 persistence.xml”)?