【问题标题】:Can I set an entity relation with just the ID?我可以仅使用 ID 设置实体关系吗?
【发布时间】:2011-12-12 10:36:08
【问题描述】:

我有一个 JPA(休眠)实体:

@Entity class Transaction {

  @ManyToOne
  private Room room;

}

当我创建一个新的Transaction 时,我知道它应该引用的Room 的ID(但没有Room 对象)。我是否可以仅使用此信息以某种方式创建并保留 Transaction,还是我真的需要:

Room room = em.find(roomId, Room.class);
em.persist(new Transaction(room, ...));

【问题讨论】:

  • 我也有这个要求,以避免不必要的数据库查询来获取子对象,纯粹是为了将其设置为外键关系。

标签: hibernate jpa orm entity-relationship


【解决方案1】:

您可以使用EntityManager.getReference() 获取相关实体的代理,而无需访问数据库。此代理是延迟初始化的,仅当您查询实体 ID 以外的任何内容时才会初始化。

【讨论】:

  • 是的,自从问了这个问题我就知道这确实是正确的方法
  • 看看this看一个例子。
【解决方案2】:

我遇到了类似的问题,我找到了替代解决方案,但可能不是最佳做法。

现在,由于映射取决于 roomId,因此创建构造函数 Room(Type roomId) 并在保存事务 bean 之前设置该 bean。所以需要从数据库中获取数据。什么hibernate关心它需要映射bean的Id。

我已经使用这种方法来获取数据,我希望您不希望在更新 Transaction 时更新 Room。所以将映射的 insert,update 属性设置为 false。

【讨论】:

  • 我想过这个,但担心 Hibernate 会看到假的Room 还没有持久化。我会试试这个。
  • @BartvanHeukelom:你试过这个吗?或者有什么问题?
猜你喜欢
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多