【问题标题】:JPA Save non owning side of ManyToMany RelationJPA 保存多对多关系的非拥有方
【发布时间】:2011-07-12 03:49:55
【问题描述】:

我有一个关于如何保存 M2M 关系的问题。一方必须始终是拥有方。在我们的场景中,我们有一个实体“角色”和一个实体“用户”。一个角色可以有多个用户,并且可以将用户分配给不同的角色。 “角色”实体是拥有站点。

在 Gui 中,管理员可以将用户添加到角色。当我与分配的用户一起保存角色时,一切正常。现在我们应该提供一种为用户分配角色的方法。这个 Gui 没问题,但我不知道如何保存更改的角色分配。保存用户不会保存分配的角色,因为它不是拥有方。

还有其他方法可以做到这一点吗?我不确定,但我认为唯一的方法是将所选用户添加到所有分配的角色并保存角色。

【问题讨论】:

    标签: many-to-many jpa-2.0 ejb-3.1


    【解决方案1】:

    要保存关联,您需要保存关系的拥有方。为了保持内存中对象的一致性,您可能希望在更新用户和角色中的集合的服务方法中管理它,并且(如果在您的实现中有意义)为您执行保存,然后无论是将用户添加到角色还是将角色添加到用户,都可以调用该方法进行关联。这至少会将模型实现从您的服务调用者中抽象出来,并确保事情被正确地持久化。

    【讨论】:

    • 好的,谢谢您的回答。我试图将角色分配保存在服务层中。这是我的例子:
    • 用户分配了一个角色。在 Gui 中,我删除了这个角色分配。当管理员点击保存我的服务方法被调用。在这种方法中,我尝试删除用户的角色关系。 user.getRoles() 为空(如预期的那样)。要删除databaae中的关系,我尝试从databaae加载角色,删除用户并保存角色。这是我的问题。加载的角色不包含用户,但它存储在数据库中。所以我不能删除关系。
    • 也许你的角色被缓存了。你能从缓存中清除角色并重新加载它以确保它反映数据库中的真实内容然后执行你的操作吗?
    • 是的。那就是问题所在。我无法从数据库中读取角色。我总是检索缓存的实例。明天我会试试你的提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多