栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Hibernate多对多关联:左侧集合包含元素,但右侧集合为空

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hibernate多对多关联:左侧集合包含元素,但右侧集合为空

问题可能是由于您两次映射了相同的双向关联。如果您对相同的联接表或联接列两次告诉Hibernate,则存在问题。在双向关联中,关联的一端必须映射该关联,而另一端必须使用

mappedBy
属性告诉Hibernate这是另一端的逆。

由于多对多是完全对称的,因此请选择一端作为所有者(即,映射关联并因此具有

@JoinTable
注释的一端)。另一侧只是反面,因此没有
@JoinTable
注释,但具有
mappedBy
属性。

例:

@Entity@Tablepublic class User extends BusinessObject {    ...    // This end is the owner of the association    @ManyToMany    @JoinTable(name= "user_role",    joinColumns = {@JoinColumn(name="user_id")},    inverseJoinColumns = {@JoinColumn(name="role_id")})      private Set<Role> roles = new HashSet<Role>();          ... }@Entity@Tablepublic class Role extends BusinessObject {    ...    // This end is not the owner. It's the inverse of the User.roles association    @ManyToMany(mappedBy = "roles")    private Set<User> users = new HashSet<User>();    ... }

补充笔记:

  • targetEntity没什么用,因为Hibernate知道了它的得益于的通用类型
    Set
    。如果Set是一个
    Set<SomeInterface>
  • CascadeType.ALL当然不是您想要的。删除用户时是否要删除用户的所有角色?具有这些角色的其他用户应该怎么办?
  • 您几乎应该总是初始化双向关联的两端。Hibernate将所有者端(即没有
    mappedBy
    属性的端)考虑在内以保持关联。
  • 所有这些都在Hibernate参考文档中进行了说明。阅读:它充满了有用的信息,并不难理解。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/447711.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号