我有一个JPA(Hibernate)实体:
@Entity class Transaction {
@ManyToOne
private Room room;
}
当我创建新的Transaction
时,我知道它应该引用的Room
的ID(但没有Room
个对象)。我可以用这个信息以某种方式创建并保持Transaction
,或者我真的需要:
Room room = em.find(roomId, Room.class);
em.persist(new Transaction(room, ...));
答案 0 :(得分:0)
我遇到了类似的问题,我发现了另一种解决方案,但可能不是最佳做法。
现在由于映射取决于 roomId ,因此在保存Transaction bean 之前创建一个构造函数 Room(Type roomId)并设置该bean。所以需要从数据库中获取数据。什么hibernate关心映射bean所需的Id。
我已使用此方法获取数据,我希望您在更新交易时不希望会议室更新。因此,设置插入,将映射的属性更新为false。
答案 1 :(得分:0)
您可以使用EntityManager.getReference()
来获取相关实体的代理,而无需访问数据库。该代理是延迟初始化的,只有当您查询实体以外的ID时,才会对其进行初始化。