0

我在两个休眠实体之间有 m2m 关系,我们称它们为电影和演员,我已经设置了双向链接。显然,这被建模为电影表和演员表,以及数据库中两者之间的外键连接表。

UI 允许您更新演员和电影之间的关系。在内部,UI 使用所涉及的电影和演员的 ID 跟踪您的屏幕更新,然后在您点击“保存”时将带有演员 ID 列表的电影 ID 发送到控制器。

现在我的问题是:假设我通过在数据库中添加四个演员来更新电影。我有要添加的演员 ID 列表,但我没有实际的演员对象,因为我只从 UI 收到了他们的 ID。

要进行此更新,我是否需要填充四个成熟的 Actor 对象只是为了将它们添加到我的 Movie 对象,以便我可以将其存储回数据库?换句话说,我是否需要先从我的数据库中进行选择才能进行更新?进行额外的选择调用似乎效率低下,因为真正要更新的只是向连接表添加一些行,而且我已经拥有了执行此操作所需的所有信息。

因此,hibernate 是否提供了一种方便的方法来直接将键添加到连接表本身(无需编写自定义的原始 sql 查询)?

4

1 回答 1

0

Session.load做你想做的事。它返回一个仅包含演员 ID 的 Actor 代理,并假设您知道该演员存在于数据库中。如果没有,由于外键约束损坏,您的事务当然会在更新后回滚。如果参与者已经存在于会话中,则将其返回。如果事务最终需要在其中一个参与者上调用方法,则无需探测:它是一个代理,如果需要,将加载参与者的状态。

JPA EntityManager 的等效方法是getReference

于 2011-07-07T17:11:41.433 回答