hibernate 学习五——多对多(Many-to-Many)

 多对多关系映射最大的特点就是生成了一张中间表,多对多关系分为单向多对多和双向多对多

单向多对多在一方加入一个set,在配置文件中需指定中间表,同时也可以指定cascade,设置了cascade="all"后,

在保存Role的时候,就将User同时保存了,

配置文件

 

<class name="Role" table="tb_role">
	<id name="roleId">
		<generator class="native"></generator>
	</id>
	<property name="roleName"></property>
</class>


<class name="User" table="tb_user">
	<id name="userId">
		<generator class="native"></generator>
	</id>
	<property name="userName"></property>
	<set name="roles" table="tb_user_role">
		<key column="userId"></key>
		<many-to-many class="Role" column="roleId" />
	</set>
</class>

<set name="roles" table="tb_user_role">

<key column="userId">

</key>

<many-to-many class="Role" column="roleId" />

</set>

在tb_user_role表中,User类中,根据roles集合中的数据,生成数据,其中userId为主键


持久化类文件

public class Role {
    private int roleId;
    private String roleName;
    ...      
    get,set方法      
    ...
}

public class User {
    private int userId;
    private String userName;
    private Set<Role> roles;
    ...      
    get,set方法      
    ...
}

 

 


双向多对多

<class name="User" table="tb_user">
	<id name="userId">
		<generator class="native"></generator>
	</id>
	<property name="userName"></property>
	<set name="roles" table="tb_user_role">
		<key column="userId"></key>
		<many-to-many class="Role" column="roleId" />
	</set>
</class>

<class name="Role" table="tb_role">
	<id name="roleId">
		<generator class="native"></generator>
	</id>
	<property name="roleName"></property>
	<set name="users" table="tb_user_role">
		<key column="roleId"></key>
		<many-to-many class="User" column="userId" />
	</set>
</class>

持久化类文件,需要在两方都有set属性

public class User {
    private int userId;
    private String userName;
    private Set<Role> roles;
    ...      
    get,set方法      
    ...
}

public class Role {
    private int roleId;
    private String roleName;
    private Set<User> users;
    ...      
    get,set方法      
    ...
}



 


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值