Hibernate多对多双向关联,Annotation与映射文件方式。解决中间表无法插入数据。

设计员工,岗位关系,多对多双向关联。

类图:这里写图片描述

用Hibernate创建的表图:这里写图片描述

实体类:

public class User {
    private Long id;
    private Set<Role> roles = new HashSet<Role>();
}
public class Role {
    private Long id;
    private Set<User> users = new HashSet<User>();
}

映射文件:

<class name="User" table="oa_user">
        <id name="id">
            <generator class="native" />
        </id>
        <!-- roles 属性, 本类与Role为多对多关系 -->
        <set name="roles" table="oa_user_role">
            <key column="userId"></key>
            <many-to-many class="Role" column="roleId"></many-to-many>
        </set>
</class>
<class name="Role" table="oa_role">
        <id name="id">
            <generator class="native"/>
        </id>
        <!-- users 属性, 本类与User为多对多关系 -->
        <set name="users" table="oa_user_role">
            <key column="roleId"></key>
            <many-to-many class="User" column="userId"></many-to-many>
        </set>
</class>

Annotation方式一般考虑不全:
User类:

    @ManyToMany
    @JoinTable(name="_role_user",
                joinColumns=@JoinColumn(name="user_id",referencedColumnName="id"),
                inverseJoinColumns=@JoinColumn(name="role_id",referencedColumnName="id"))
    public Set<Role> getRoles() {
        return roles;
    }

Role类

    @ManyToMany
    @JoinTable(name="_role_user",
        joinColumns=@JoinColumn(name="role_id",referencedColumnName="id"),
        inverseJoinColumns=@JoinColumn(name="user_id",referencedColumnName="id"))
    public Set<User> getUsers() {
        return users;
    }

Annotation方式困扰很久,中间表一直无法插入数据。
为了知识完整性起见,所以在项目各种关联关系都用到了。日后工作中建议还是不要使用多对多双向关联,用多对一 一对多。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值