表结构:

类图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd29iZW5kaWFua3Vu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

CRUD:

User

package com.demo.model;

import java.util.Set;

/**用户信息
* @author wobendiankun
*2014-10-29 下午11:05:26
*/
public class User {
/**
*用户Id
*/
private int userId;
/**
* username
*/
private String userName;
/**
* 密码
*/
private String password; private Student student ;
private Set<Role> roles; public User() {
} public User(int userId) {
this.userId = userId;
} public User(String userName, String password) {
this.userName = userName;
this.password = password;
} public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
} public Set<Role> getRoles() {
return roles;
} public void setRoles(Set<Role> roles) {
this.roles = roles;
} }

Role

package com.demo.model;

import java.util.Set;

/**角色信息
* @author wobendiankun
*2014-11-2 下午08:29:54
*/
public class Role {
/**
* 角色id
*/
private int roleId;
/**
* 角色名称
*/
private String roleName;
private Set<User> users; public Role() {
} public Role(int roleId) {
this.roleId = roleId;
} public Role(String roleName) {
this.roleName = roleName;
} public int getRoleId() {
return roleId;
}
public void setRoleId(int roleId) {
this.roleId = roleId;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
} }

配置:

User.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping > <class name="com.demo.model.User" table="t_user">
<id name="userId" column="user_id">
<generator class="sequence">
<param name="sequence">SEQ_T_USER</param>
</generator>
</id>
<property name="userName" column="user_name" />
<property name="password" />
<many-to-one name="student" column="student_id" unique="true"></many-to-one>
<set name="roles" table="t_user_role" inverse="true">
<key column="user_id"></key>
<many-to-many class="com.demo.model.Role" column="role_id"></many-to-many>
</set>
</class>
</hibernate-mapping>

Role.hbm.xml

<?xml version="1.0"?

>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping > <class name="com.demo.model.Role" table="t_role">
<id name="roleId" column="role_id">
<generator class="sequence">
<param name="sequence">SEQ_T_ROLE</param>
</generator>
</id>
<property name="roleName" column="role_name" />
<set name="users" table="t_user_role" lazy="extra">
<key column="role_id"></key>
<many-to-many class="com.demo.model.User" column="user_id"></many-to-many>
</set>
</class>
</hibernate-mapping>

add:

@Test
public void addTest(){
User user1=new User("赵三","111");
User user2=new User("无四","111");
Set<User> users=new HashSet<User>();
users.add(user1);
users.add(user2); Role role=new Role("財务部");
Set<Role> roles=new HashSet<Role>();
//设置双向关系
role.setUsers(users);
user1.setRoles(roles);
user2.setRoles(roles);
Session session = null;
try {
session = HibernateUtil.openSession();
session.beginTransaction();
session.save(role);
session.save(user1);
session.save(user2);
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
HibernateUtil.closeSession(session);
}
}

发出sql:

Hibernate: insert into t_role (role_name, role_id) values (?

, ?

)
Hibernate: insert into t_user (user_name, password, student_id, user_id) values (?, ? , ? , ?)
Hibernate: insert into t_user (user_name, password, student_id, user_id) values (?, ? , ?, ?)
Hibernate: insert into t_user_role (role_id, user_id) values (? , ?)
Hibernate: insert into t_user_role (role_id, user_id) values (?, ?)

load;

@Test
public void loadTest(){
Session session = null;
try {
session = HibernateUtil.openSession();
session.beginTransaction();
Role role=(Role)session.load(Role.class,3);
System.out.println("角色名称:"+role.getRoleName());
System.out.println("users:"+role.getUsers());
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
HibernateUtil.closeSession(session);
}
}

发出sql:

Hibernate: select role0_.role_id as role1_4_0_, role0_.role_name as role2_4_0_ from t_role role0_ where role0_.role_id=?
角色名称:財务部
Hibernate: select users0_.role_id as role2_4_1_, users0_.user_id as user1_1_, user1_.user_id as user1_2_0_, user1_.user_name as user2_2_0_, user1_.password as password2_0_, user1_.student_id as student4_2_0_ from t_user_role users0_ inner join t_user user1_ on users0_.user_id=user1_.user_id where users0_.role_id=? users:[com.demo.model.User@1f31652, com.demo.model.User@3e96cf]

版权声明:本文博客原创文章,博客,未经同意,不得转载。

hibernate它 11.many2many双向的更多相关文章

  1. hibernate一对一外键双向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  2. hibernate一对一主键双向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  3. Hibernate的关联映射——双向1-N关联

    Hibernate的关联映射--双向1-N关联 对于1-N的关联,Hibernate推荐使用双向关联,而且不要让1的一端控制关联关系,而是用N的一端控制关联关系.双线的1-N关联和N-1关联是两种相同 ...

  4. Hibernate -- 一对多的双向关联关系

    示例代码: Customer.java package cn.itcast.many2onedouble; import java.util.HashSet; import java.util.Set ...

  5. hibernate(十)双向关联关系的CRUD

    本文链接:http://www.orlion.ml/28/ 一.保存 1. 假设一个group有多个user,一个user只属于一个group,当保存user对象到数据库中时可以 User u = n ...

  6. Hibernate映射多对多双向关联关系(小案例)

    多对多双向关联关系(Project(工程)/Emp(员工)为案例): 步骤如下: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 pr ...

  7. [原创]java WEB学习笔记83:Hibernate学习之路---双向 1-n介绍,关键点解释,代码实现,set属性介绍(inverse,cascade ,order-by )

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. Hibernate 一对多自身双向关联关系 用于类别表的实现

    分类:一对多自身双向关联关系 Java持久化类: package com.hyy.hibernate.one_to_many.domain; import java.util.HashSet; imp ...

  9. Hibernate 建立一对多双向关联关系

    下面内容整理自<精通Hibernate>第二版 注:既然是双向关联."一对多双向关联"和"多对一双向关联"是同一回事. 对象位于内存中,在内存中从一 ...

随机推荐

  1. 新版SDK自己主动加入PlaceholderFragment的思考

    自从Android SDK更新到22.6.3,发现新建Activity的时候,会自己主动生成一个Fragment.这个Fragment是activity的静态内部类.同一时候生成了一个xml叫frag ...

  2. atitit.java方法属性赋值and BeanUtils 1.6.1 .copyProperty的bug

    atitit.java分配给属性值方法and BeanUtils 1.6.1 .copyProperty的bug 1. core.setProperty(o, "materialId&quo ...

  3. HDU 4643 GSM 暑期多校联合训练第五场 1001

    点击打开链接 我就不说官方题解有多坑了 V图那么高端的玩意儿 被精度坑粗翔了 AC前 AC后 简直不敢相信 只能怪自己没注意题目For the distance d1 and d2, if fabs( ...

  4. Linux智能小开关rfkill

    Linux智能小开关rfkill Rfkill,当中rf是Radio frequency(射频).主要作用是一个专门管理开关的子系统,举例说明Android手机的通知栏能够方便地开关Airplane/ ...

  5. My Solution: Word Ladder

    public class Solution { public int ladderLength(String start, String end, Set<String> dict) { ...

  6. BZOJ 3531: [Sdoi2014]旅游

    职务地址:http :// www . lydsy . com / JudgeOnline / problem . php ? id = 3531 标题效果:看到原来的标题. 算法讨论:树链拆分. 就 ...

  7. 存读Blob Oracle

  8. 飘逸的python - 保持命名空间的整洁

    API的设计是一个艺术活.往往需要其简单.易懂.整洁.不累赘. 很多时候,我们在底层封装一个方法给高层用,而其它的方法只是为了辅助这个方法的. 也就是说我们只需要暴露这个方法就行,不用关心这个方法是怎 ...

  9. android ksoap2调用.net Webservice 方法总结

    android  ksoap2调用.net Webservice 方法直接放到一个类里: package com.util; import org.ksoap2.SoapEnvelope; impor ...

  10. mysql 触发器和存储过程组合使用,实现定时触发操作

    mysql可以实现定时触发功能,比如说定于某某时间mysql数据库做什么工作,或每隔多长时间做什么工作. 第二种情况应用还是比较广的,比如说我希望每天检查一下我的数据信息,超过一个月的无用信息清除以腾 ...