多对多关联之双向
来源:互联网 发布:linux dns配置文件 编辑:程序博客网 时间:2024/05/22 02:12
原理跟多对多关联之单向是一样的,都是要加入一个第三方表,所不同的只是对象模型
对象模型图如下:
对象模型如下:
public class User {
private int id;
private String name;
private Set roles;
}
public class Role {
private int id;
private String name;
private Set users;
}
具体 映射如下:
Role.hbm.xml
<hibernate-mapping>
<class name="com.bjpowernode.hibernate.Role" table="t_role">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="users" table="t_user_role">
<key column="role_id" not-null="true"/>
<many-to-many class="com.bjpowernode.hibernate.User" column="user_id"/>
</set>
</class>
</hibernate-mapping>
User.hbm.xml
<hibernate-mapping>
<class name="com.bjpowernode.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="roles" table="t_user_role">
<key column="user_id" not-null="true"/>
<many-to-many class="com.bjpowernode.hibernate.Role" column="role_id" />
</set>
</class>
</hibernate-mapping>
需要注意:
* 生成的中间表名称必须一样
* 生成的中间表中的字段必须一样
测试如下:
public class Many2ManyTest extends TestCase {
public void testSave1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Role r1 = new Role();
r1.setName("数据录入人员");
session.save(r1);
Role r2 = new Role();
r2.setName("商务主管");
session.save(r2);
Role r3 = new Role();
r3.setName("商务经理");
session.save(r3);
Role r4 = new Role();
r4.setName("项目会计");
session.save(r4);
User u1 = new User();
u1.setName("张三");
Set u1Roles = new HashSet();
u1Roles.add(r1);
u1Roles.add(r2);
u1.setRoles(u1Roles);
session.save(u1);
User u2 = new User();
u2.setName("李四");
Set u2Roles = new HashSet();
u2Roles.add(r1);
u2Roles.add(r2);
u2Roles.add(r3);
u2.setRoles(u2Roles);
session.save(u2);
User u3 = new User();
u3.setName("王五");
Set u3Roles = new HashSet();
u3Roles.add(r3);
u3Roles.add(r4);
u3.setRoles(u3Roles);
session.save(u3);
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
public void testLoad1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
User user = (User)session.load(User.class, 2);
System.out.println(user.getName());
for (Iterator iter=user.getRoles().iterator(); iter.hasNext();) {
Role role = (Role)iter.next();
System.out.println(role.getName());
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
public void testLoad2() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Role role = (Role)session.load(Role.class, 1);
System.out.println(role.getName());
for (Iterator iter=role.getUsers().iterator(); iter.hasNext();) {
User user = (User)iter.next();
System.out.println(user.getName());
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
}
- 多对多关联之双向
- Hibernate关联映射之--双向多对多关联
- Hibernate关联之 多对多双向关联
- 多对多双向关联
- 双向关联:多对多
- Hibernate之关于多对多双向关联映射
- Hibernate 关联映射之---- 多对多双向映射
- JPA之JPA中的多对多双向关联
- 一对多关联之双向
- Hibernate多对多双向关联映射
- Hibernate 多对多双向关联
- hibernate 多对多 双向关联实战
- 双向多对多关联实例
- 多对多关联映射 单向+双向
- JPA多对多双向关联实例
- Hibernate 多对多双向关联
- Hibernate 多对多双向关联
- Hibernate 多对多双向关联
- LINUX库文件的生成与使用
- tar命令的使用,写得非常详细,适合初学者!!
- jquery checkbox,radio是否选中的判断代码
- 使用Eclipse的几个必须掌握的快捷方式+改默认编码
- TABSTRIP 的用法
- 多对多关联之双向
- MIPS GCC 嵌入式汇编(龙芯适用) (2008-07-22 14:06)
- java 学习 String类 和 StringBuffer类的用法 暑假第九天
- Open vSwitch 使用
- Intent 案例
- 要做一个好的pm究竟需要什么?
- Lucene入门以及简单实例
- 非窗口类中使用定时器的方法
- MessageBox用法