有效地更新hibernate实体之间的关系

时间:2011-07-07 16:23:35

标签: hibernate performance m2m

我在两个休眠实体之间有一个m2m关系,让我们称之为电影和演员,我用双向链接设置它们。显然这被建模为一个电影表,一个actors表,以及一个在db中的两个外键之间的连接表。

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

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

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

hibernate是否提供了一种直接向连接表本身添加键的方法(无需编写自定义原始SQL查询)?

1 个答案:

答案 0 :(得分:0)

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

JPA EntityManager的等效方法是getReference