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();}}}
数据库效果:
阅读全文
0 0
- hibernate_day03_09_多对多操作
- 注解多对多操作
- Hibernate多对多操作
- Hibernate多对多操作
- Hibernate多对多操作
- JDBC多表操作---多对多
- Hibernate一对多,多对多操作
- Hibernate 多对多 删除操作
- Hibernate多对多操作步骤
- thinkphp的多对多关系操作
- 多对多的关系操作
- hibernate03 关系操作 多对多
- 一对多、对多一、批量操作
- hibernate多表操作之多对多
- Hibernate操作多对多关系
- models数据库多对多操作
- hibernate多对多关系操作
- hibernate多对一的操作解析
- VMWare里CentOS7与win10共享文件
- CF contest 888 problem E 【思维 + 状压 + 中途相遇法(折半搜索)】
- 杭电2017新生赛1007-找方块
- 动态数据结构
- gRPC 在 Python中的应用
- hibernate_day03_09_多对多操作
- C语言——Linux项目:文件复制命令的实现
- 11AIncreasing Sequence
- 随便写点关于我的github仓库
- 6.7 接口参数
- 超大背包问题 (折半枚举)
- uml类图与代码
- BigDecimal、DecimalFormat工具类-浮点类型计算格式化-史上最全=_=
- java日常学习:事件(简要版)