hibernare多对多关系映射
来源:互联网 发布:mac文档在哪里 编辑:程序博客网 时间:2024/05/29 12:24
多对多表设计2张表需要在多创建出来一张来维护两张表的关系
- 表中的关系
- 创建实体
- 用户实体(user)
package cn.xiaolong.domian;import java.util.HashSet;import java.util.Set;public class User { private Long user_uid; private String user_name; // 所有角色的集合 private Set<Role> role = new HashSet<Role>(); public Set<Role> getRole() { return role; } public void setRole(Set<Role> role) { this.role = role; } public Long getUser_uid() { return user_uid; } public void setUser_uid(Long user_uid) { this.user_uid = user_uid; } public String getUser_name() { return user_name; } public void setUser_name(String user_name) { this.user_name = user_name; }}
- 角色实体(role)
package cn.xiaolong.domian;import java.util.Set;public class Role { private Long role_id; private String role_name; //所有用户角色的集合 private Set<User> user = new HashSet<User>(); public Set<User> getUser() { return user; } public void setUser(Set<User> user) { this.user = user; } public Long getRole_id() { return role_id; } public void setRole_id(Long 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; }}
- 创建映射
- user的orm映射文件(user.hbm.xml)
- user表中使用了级联操作 role表就要放弃维护,负责会多生成一张中间表(表中还是没有数据的)
<?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 package="cn.xiaolong.domian"> <class name="User"> <id name="user_uid"> <generator class="native"></generator> </id> <property name="user_name"></property> <!--set标签: name元素:关联的另一方的集合的属性名称 table元素:中间表名称 cascade属性:级联操作 --> <set name="role" table="user_role" cascade="save-update"> <!--key标签: columu元素:当前对象在中间表在的外键名称 --> <key column="user_id"></key> <!--many-to-many标签: columu元素:关联另一方在中间表的名称 class元素:关联另一方的类的全路径 --> <many-to-many column="role_id" class="cn.xiaolong.domian.Role"> </many-to-many> </set> </class></hibernate-mapping>
- role的orm映射文件(role.hbm.xml)
- inverse元素:放弃维护 (上面user表使用级联操作在对应的表中必须放弃维护要不数据库里就会生成2张中间表, role不维护关系就不会生成表了)
<?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 package="cn.xiaolong.domian"> <class name="Role" table="role"> <id name="role_id"> <generator class="nativa"></generator> </id> <property name="role_name"></property> <!--set标签: name元素:关联的另一方的集合的属性名称 table元素:中间表名称 inverse元素:放弃维护 上面user表使用级联操作在对应的表中必须放弃维护要不数据库里就会生成2张中间表,role不维护关系就不会生成表了) --> <set name="user"table="user_role" inverse="true"> <!--key标签: columu元素:当前对象在中间表在的外键名称 --> <key column="role_id" /> <!--many-to-many标签: columu元素:关联另一方在中间表的名称 class元素:关联另一方的类的全路径 --> <many-to-many column="user_id" class="cn.xiaolong.domian.User"></many-to-many> </set> </class></hibernate-mapping>
- 在核心配置文件中加入映射文件
- hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///hibernate_crm</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> <!-- 表生产策略 --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 指定hibernate操作数据库时的隔离级别 <property name="hibernate.connection.isolation">4</property> <!-- 指定session与当前线程绑定 --> <property name="hibernate.current_session_context_class">thread</property> <!-- 引入orm元数据 路径写src下的 --> <mapping resource="cn/xiaolong/domian/role.hbm.xml" /> <mapping resource="cn/xiaolong/domian/user.hbm.xml" /> </session-factory></hibernate-configuration>
这两句是关键
<!-- 引入orm元数据 路径写src下的 --> <mapping resource="cn/xiaolong/domian/role.hbm.xml" /> <mapping resource="cn/xiaolong/domian/user.hbm.xml" />
- 代码测试
@Test public void demo(){ Session session = HibernateUtils.getCurrentSession(); Transaction tx = session.beginTransaction(); //创建user User user1 = new User(); user1.setUser_name("张三"); User user2 = new User(); user2.setUser_name("李四"); //创建角色 Role role1 = new Role(); role1.setRole_name("程序员"); Role role2 = new Role(); role2.setRole_name("产品"); //user维护关系 user1.getRole().add(role1); user2.getRole().add(role2); session.save(user1); session.save(user2); tx.commit(); }
阅读全文
0 0
- hibernare多对多关系映射
- 多对多映射关系
- 多对多关系映射
- 多对多关系映射
- Mybatis映射关系-多对一映射
- Hibernate关系映射之多对多关系
- Hibernate对象关系映射-- 多对多关联关系映射
- Hibernate映射关系之多对多关系映射
- Hibernate对象关系映射详解之一对多关系映射
- hibernare多表关联(级联操作)
- 关系映射多对多详解
- Hibernate的关系映射多对多
- 双向多对多关系的映射
- hibernate之映射关系多对多
- hibernate 映射关系 多对多
- Hibernate多对多关系映射
- Hibernate映射关系-多对多
- Hibernate 多对多关系映射详解
- k-means聚类算法
- 【算法题】判断二叉树平衡性
- TCP的三次握手与四次挥手(详解+动图)
- 链表
- 关于PCM音频数据的相关转换算法
- hibernare多对多关系映射
- Java swing创建按钮和标签及处理
- 20170604_分割成回文串
- Java类和C结构体之间自动转换
- Spring配置事务的五种方式
- 前端学习笔记1
- 机器是如何学会歧视的?
- 安卓开发中实用的查看日志方法
- Python 组合实例