hibernate_day03_09_多对多操作

来源:互联网 发布:用mac输入英文破折号 编辑:程序博客网 时间:2024/06/07 17:24


com.hlg.manytomany.User

package com.hlg.manytomany;import java.util.HashSet;import java.util.Set;public class User {private Integer user_id;//用户id  private String user_name;//用户名称  private String user_password;//用户密码    private Set<Role> setRole = new HashSet<Role>();      public Set<Role> getSetRole() {return setRole;}public void setSetRole(Set<Role> setRole) {this.setRole = setRole;}public Integer getUser_id() {return user_id;}public void setUser_id(Integer user_id) {this.user_id = user_id;}public String getUser_name() {return user_name;}public void setUser_name(String user_name) {this.user_name = user_name;}public String getUser_password() {return user_password;}public void setUser_password(String user_password) {this.user_password = user_password;}    }

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">    <hibernate-mapping><!-- 1 配置类和表对应 class标签name属性:实体类全路径table属性:数据库表名称--><class name="com.hlg.manytomany.User" table="t_user"><id name="user_id" column="user_id"><generator class="native"></generator></id><property name="user_name" column="user_name"></property><property name="user_password" column="user_password"></property><!-- 在用户里面表示所有角色,使用set标签 name属性:角色set集合名称table属性:第三张表名称--><set name="setRole" table="user_role" cascade="save-update,delete"><!-- key标签里面配置配置当前映射文件在第三张表外键名称 --><key column="userid"></key><!-- class:角色实体类全路径     column:角色在第三张表外键名称 --><many-to-many class="com.hlg.manytomany.Role" column="roleid"></many-to-many></set></class></hibernate-mapping>

角色对象:com.hlg.manytomany.Role

package com.hlg.manytomany;import java.util.HashSet;import java.util.Set;public class Role {private Integer role_id;//角色id  private String role_name;//角色名称  private String role_memo;//角色描述    private Set<User> setUser = new HashSet<User>();    public Set<User> getSetUser() {return setUser;}public void setSetUser(Set<User> setUser) {this.setUser = setUser;}public Integer getRole_id() {return role_id;}public void setRole_id(Integer role_id) {this.role_id = role_id;}public String getRole_name() {return role_name;}public void setRole_name(String role_name) {this.role_name = role_name;}public String getRole_memo() {return role_memo;}public void setRole_memo(String role_memo) {this.role_memo = role_memo;}    }


角色对象的配置文件:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">    <hibernate-mapping><!-- 1 配置类和表对应 class标签name属性:实体类全路径table属性:数据库表名称--><class name="com.hlg.manytomany.Role" table="t_role"><id name="role_id" column="role_id"><generator class="native"></generator></id><property name="role_name" column="role_name"></property><property name="role_memo" column="role_memo"></property><!-- 在角色里面表示所有用户,使用set标签 --><set name="setUser" table="user_role"><!-- 角色在第三张表外键 --><key column="roleid"></key><many-to-many class="com.hlg.manytomany.User" column="userid"></many-to-many></set></class></hibernate-mapping>


核心配置文件加上:

<mapping resource="com/hlg/manytomany/User.hbm.xml"/><mapping resource="com/hlg/manytomany/Role.hbm.xml"/>

测试:

package com.hlg.hibernatetest;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.junit.Test;import com.hlg.entity.Customer;import com.hlg.entity.LinkMan;import com.hlg.manytomany.Role;import com.hlg.manytomany.User;import com.hlg.utils.HibernateUtils;public class HibernateManytoMany {//多对多 级联保存@Testpublic void testSave(){SessionFactory sessionFactory = null;Session session = null;Transaction tx = null;try{//得到sessionFactorysessionFactory = HibernateUtils.getSessionFactory();//得到sessionsession = sessionFactory.openSession();//开启事务tx = session.beginTransaction();//添加两个用户,为每个用户添加两个角色//1 创建对象User user1 = new User();user1.setUser_name("lucy");user1.setUser_password("123");User user2 = new User();user2.setUser_name("mary");user2.setUser_password("456");Role r1 = new Role();r1.setRole_name("总经理");r1.setRole_memo("总经理");Role r2 = new Role();r2.setRole_name("秘书");r2.setRole_memo("秘书");Role r3 = new Role();r3.setRole_name("保安");r3.setRole_memo("保安");//2 建立关系,把角色放到用户里面// user1 -- r1/r2user1.getSetRole().add(r1);user1.getSetRole().add(r2);// user2 -- r2/r3user2.getSetRole().add(r2);user2.getSetRole().add(r3);//3 保存用户session.save(user1);session.save(user2);//提交事务tx.commit();}catch(Exception e){//回滚事务tx.rollback();}finally{//关闭session.close();sessionFactory.close();}}}

数据库效果:







原创粉丝点击