hibernate映射多对多,一对一,一对多,自身关联综合应用
来源:互联网 发布:计算机算法与数学模型 编辑:程序博客网 时间:2024/05/23 19:13
废话不多说直接上贴图,详细解释都在配置映射文件中:
再写映射文件时先写关系注释,再根据注释写对应的关系,不要根据一个类一直写到整个完整关系,这样比较累,还麻烦,建议一个关系一个关系的写,这样有条理,还清晰
出错也容易检查
根据类配置hibernate:
类图:
实体类:
Department:
public class Department {//id//private String id;private Long id;//姓名private String name;//描述private String desc;//上司部门private Department parent;//下属部门private Set<Department> children=new HashSet<Department>();//部门所有员工private Set<Employee> employees=new HashSet<Employee>();setter...getter...}Employee类:
public class Employee {//idprivate Long id;//姓名private String name;//性别,true男false女private boolean gender;//生日private Date birthday;//描述private String desc;//所属部门private Department department;//对应账号private UserAccount userAccount;setter...getter...}
</pre><pre name="code" class="html">
Privilege类:
public class Privilege {//idprivate Long id;//权限对应的操作private String action;//拥有该权限的账户private Set<UserAccount> userAccounts=new HashSet<UserAccount>();setter...getter...}
UserAccount类:
public class UserAccount {//idprivate Long id;//用户名private String userName;//密码private String password;//所属员工private Employee employee;//权限集合private Set<Privilege> privileges=new HashSet<Privilege>();setter...getter...}
映射文件:
Department.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"><!-- Generated 2016-4-8 20:12:23 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping package="com.leige.domain"><class name="Department" table="department"><id name="id" type="long" column="id"><generator class="native"></generator></id><property name="name" length="15" type="string" column="name" /><property name="desc" type="text" length="1000" column="desc_" /><!-- 自身的多对一映射 上司部门 表示与上司部门的多对一关系--><many-to-one name="parent" class="Department" column="parentID"></many-to-one><!-- 自身一对多映射,下属部门 表示与下属部门的一对多关系--><set name="children"><key column="parentID"></key><one-to-many class="Department" /></set><!-- 部门与员工的一对多映射 本方为无外键方:--><set name="employees" lazy="true"><key column="departmentID"></key><one-to-many class="Employee" /></set></class></hibernate-mapping>Employee.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"><!-- Generated 2016-4-8 20:12:23 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping package="com.leige.domain"> <class name="Employee" table="employees"> <id name="id" type="long"> <column name="id" /> <generator class="native" /> </id> <property name="name" type="string"> <column name="name" /> </property> <property name="gender" type="boolean"> <column name="gender" /> </property> <property name="birthday" type="date"> <column name="birthday" /> </property> <property name="desc" type="text" length="1000"> <column name="desc_" /> </property><!-- 员工与部门的多对一映射本方為有外鍵方, --><many-to-one name="department" class="Department" column="departmentID" /><!-- 员工与用户的一对一映射级联删除,property-ref:表示引用了UserAccount中的employee属性本方为无外键方:--> <one-to-one name="userAccount" class="UserAccount" cascade="delete" property-ref="employee" > </one-to-one> </class></hibernate-mapping>
Privilege.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"><!-- Generated 2016-4-8 20:12:23 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping package="com.leige.domain"> <class name="Privilege" table="PRIVILEGE"> <id name="id" type="long"> <column name="ID" /> <generator class="native" /> </id> <property name="action" type="string"> <column name="action" /> </property><!-- 权限和用户的多对多映射 权限对象不维护中间表,减少不必要的数据库操作当加载权限对象是立即加载用户--><set name="userAccounts" inverse="true" lazy="false" table="user_privilege"> <key column="pid"></key> <many-to-many class="UserAccount" column="uid"></many-to-many></set> </class></hibernate-mapping>
UserAccount.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"><!-- Generated 2016-4-8 20:12:23 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping package="com.leige.domain"> <class name="UserAccount" table="userAccount"> <id name="id" type="long"> <column name="ID" /> <generator class="native" /> </id> <property name="userName" type="string" > <column name="username" /> </property> <property name="password" type="string" access="field"> <column name="pwd" /> </property><!-- 账户与员工的一对一映射 采用基于外键的方式--><many-to-one name="employee" class="Employee" unique="true"> <column name="employeeID"></column> </many-to-one> <!-- 账户和权限的多对多映射 账户维护中间表: 立即加载 --> <set name="privileges" table="user_privilege" inverse="false" lazy="false"> <key column="uid"></key> <many-to-many class="Privilege" column="pid" ></many-to-many> </set> </class></hibernate-mapping>
配置文件:
hibnate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql:///test</property><property name="connection.username">root</property><property name="connection.password"></property><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- 指定方言,指定mysql ,建议配置成上面,不然hibernate在执行创建表的时候会报错,目前没有找到原因--><property name="hbm2ddl.auto">update</property><!-- -这个参数指定,hibernate可以更新数据,当为create时,hibernate每次执行插入操作都会先删除表,然后在创建表插入数据 --><property name="show_sql">true</property><!-- -这个参数,表示,hibernate会把自动生成的参数,显示在控制台给我们看,一般用于开发阶段 --><!-- 这个属性是设置事务隔离级别的1:表示读未提交2:表示读已提交4:可重复读8:串行化(不可并发) --><property name="hibernate.connection.isolation">2</property><!-- <mapping resource="com/leige/domain/User.hbm.xml"/> --><!-- -指定映射文件,告诉hibernate,对象与表的映射关系 --><!-- 配置c3p0数据库连接池我们可以在etc文件夹中找到所有的配置文件#hibernate.c3p0.max_size 2 //数据库最大连接数#hibernate.c3p0.min_size 2 最小连接数#hibernate.c3p0.timeout 5000 最大连接时间#hibernate.c3p0.max_statements 100 最大的PreparedStatement的数量#hibernate.c3p0.idle_test_period 3000 每隔3000秒检查连接池里的空闲连接 ,单位是秒#hibernate.c3p0.acquire_increment 2 当连接池里面的连接用完的时候,c3p0连接池增长的个数#hibernate.c3p0.validate false 每次都验证连接是否可用 --><property name="hibernate.c3p0.max_size">15</property><property name="hibernate.c3p0.min_size">3</property><property name="hibernate.c3p0.timeout">5000</property><property name="hibernate.c3p0.max_statements">100</property><property name="hibernate.c3p0.acquire_increment">3</property><property name="hibernate.c3p0.validate">true</property><!-- 配置hibernate二级缓存类型,指定二级缓存的实现类 这个类时hibernate自己的简单实现类--> <property name="cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</property><!-- 加载二级缓存的配置文件 --> <property name="net.sf.ehcache.configurationResourceName">/ehcache.xml</property><property name="hibernate.cache.use_second_level_cache">true</property> <!-- 指定查询缓存,list.itreate()方法都要开启查询缓存 --><property name="hibernate.cache.use_query_cache">true</property><!-- 指定使用二级缓存的类,以及缓存策略 --><mapping resource="com/leige/domain/Department.hbm.xml"/><mapping resource="com/leige/domain/Employee.hbm.xml"/><mapping resource="com/leige/domain/Privilege.hbm.xml"/><mapping resource="com/leige/domain/UserAccount.hbm.xml"/></session-factory></hibernate-configuration>
缓存配置文件:
<ehcache> <diskStore path="c:/leige/"/> <defaultCache maxElementsInMemory="10" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" /></ehcache>
1 0
- hibernate映射多对多,一对一,一对多,自身关联综合应用
- Hibernate关联关系映射 一对一 一对多 多对一
- hibernate一对多关系映射(自身关联)
- Hibernate一对一关联映射和一对多关联映射
- Hibernate映射 --- 自身跟自身的一对多关联
- hibernate关联映射:多对一、一对一
- hibernate之映射关系一对多(自身关联)
- Hibernate关系(双向一对一、一对多、多对多和自身多对多)映射注解整理
- Hibernate关联关系映射配置(一对多,多对多,一对一)
- hibernate关联关系配置(一对一,一对多,多对多)
- Hibernate关联关系配置(一对一,一对多,多对多)
- 一对多自身关联双向映射
- Hibernate双向一对一,一对多,多对多关系映射
- Hibernate 关系映射 (一对一,一对多,多对多)
- Mybatis一对一、一对多关联映射
- MyBatis关联映射:一对一、一对多
- Hibernate的关联关系注解映射(一对一、一对多、多对一、多对多、自连接)
- Hibernate 一对多关联映射& 多对多管理映射
- Fibonacci
- 算法_ LongestPalindromicSubstring
- 新建git,不能git push
- 获取java项目的根目录-方法大全
- leetcode196-Delete Duplicate Emails(删除重复并且id较大的数据)
- hibernate映射多对多,一对一,一对多,自身关联综合应用
- 手机的
- Python 练习实例10
- php关于盗链问题
- 关于node.js资料集
- 网络基础
- Configuring the Jetty Maven Plugin
- CF 广搜(基础)
- 【C/C++】再探string