Hibernate实体映射文件多对多等关系简单应用技巧
2014-05-23 20:56
399 查看
认真开完以后,就能很简单的写出各种关系了
第一步,写注释:
<!--xx属性,本类与Yy(类)的多对一 -->
<!--xx属性,本类与Yy(类)的一对多 -->
<!--xx属性,本类与Yy(类)的多对多 -->
<!--xx属性,本类与Yy(类)的一对一 -->
第二部,拷模版
<!--xx属性,本类与Yy(类)的多对一 -->
<many-to-one name="" class="" column=""></many-to-one>
<!--xx属性,本类与Yy(类)的一对多 -->
<set name="">
<key column=""></key>
<one-to-many class=""/>
</set>
<!--xx属性,本类与Yy(类)的多对多 -->
<set name="" table="">
<key column=""></key>
<many-to-many class="" column=""></many-to-many>
</set>
<!--xx属性,本类与Yy(类)的一对一 -->
<many-to-one name="" class="" column="" unique="true"></many-to-one>
第三步,填空:
<!--xx属性,本类与Yy(类)的多对一 -->
<many-to-one name="xx" class="Yy" column=""></many-to-one>
<!--xx属性,本类与Yy(类)的一对多 -->
<set name="xx">
<key column=""></key>
<one-to-many class="Yy"/>
</set>
<!--xx属性,本类与Yy(类)的多对多 -->
<set name="xx" table="">
<key column=""></key>
<many-to-many class="Yy" column=""></many-to-many>
</set>
<!--xx属性,本类与Yy(类)的一对一 -->
<many-to-one name="xx" class="Yy" column="" unique="true"></many-to-one>
说明:
多对一,一对多中的column的名字自己取,但是对应的两个关系的两个column必须一样;
一般在多的一方,把属性名+Id当成column值,一对多 一方也使用这个column,这样就可以了;
多对多中,tables 是多对多的中间表一般命名中包括两个表名。 key中的column值得是集合外键,指的是引用当前自己表的外键,本对象+Id。 many-to-many指的是引用对方的外键,一般关联对象名+Id;
下面我们给出一个例子:
实体类:
Role
hbn.xml
User:
Department
第一步,写注释:
<!--xx属性,本类与Yy(类)的多对一 -->
<!--xx属性,本类与Yy(类)的一对多 -->
<!--xx属性,本类与Yy(类)的多对多 -->
<!--xx属性,本类与Yy(类)的一对一 -->
第二部,拷模版
<!--xx属性,本类与Yy(类)的多对一 -->
<many-to-one name="" class="" column=""></many-to-one>
<!--xx属性,本类与Yy(类)的一对多 -->
<set name="">
<key column=""></key>
<one-to-many class=""/>
</set>
<!--xx属性,本类与Yy(类)的多对多 -->
<set name="" table="">
<key column=""></key>
<many-to-many class="" column=""></many-to-many>
</set>
<!--xx属性,本类与Yy(类)的一对一 -->
<many-to-one name="" class="" column="" unique="true"></many-to-one>
第三步,填空:
<!--xx属性,本类与Yy(类)的多对一 -->
<many-to-one name="xx" class="Yy" column=""></many-to-one>
<!--xx属性,本类与Yy(类)的一对多 -->
<set name="xx">
<key column=""></key>
<one-to-many class="Yy"/>
</set>
<!--xx属性,本类与Yy(类)的多对多 -->
<set name="xx" table="">
<key column=""></key>
<many-to-many class="Yy" column=""></many-to-many>
</set>
<!--xx属性,本类与Yy(类)的一对一 -->
<many-to-one name="xx" class="Yy" column="" unique="true"></many-to-one>
说明:
多对一,一对多中的column的名字自己取,但是对应的两个关系的两个column必须一样;
一般在多的一方,把属性名+Id当成column值,一对多 一方也使用这个column,这样就可以了;
多对多中,tables 是多对多的中间表一般命名中包括两个表名。 key中的column值得是集合外键,指的是引用当前自己表的外键,本对象+Id。 many-to-many指的是引用对方的外键,一般关联对象名+Id;
下面我们给出一个例子:
实体类:
Role
/** * 实体:岗位 * @author Jelly * */ public class Role implements Serializable{ private Long id; private String name; private Set<User> users = new HashSet<User>(); }
hbn.xml
<hibernate-mapping package="com.hqu.oa.domain"> <class name="Role" table="hqu_role"> <id name="id"> <generator class="native" /> </id> <property name="name" /> <!-- users属性,本类与User多对多关系 --> <set name="users" table="hqu_user_role" > <key column="roleId"></key> <many-to-many class="User" column="userId"></many-to-many> </set> </class> </hibernate-mapping>
User:
/** * 实体:用户 * @author Jelly * */ public class User implements Serializable{ private Long id; private Department department;// 所属部门 private Set<Role> roles = new HashSet<Role>(); }User.hbm.xml
<hibernate-mapping package="com.hqu.oa.domain"> <class name="User" table="hqu_user"> <id name="id"> <generator class="native" /> </id> <!-- department属性,本类与Department的多对一关系 --> <many-to-one name="department" class="Department" column="departmentId"></many-to-one> <!-- roles属性,本类与Role的多对多关系 --> <set name="roles" table="hqu_user_role" order-by="roleId" lazy="false"> <key column="userId"></key> <many-to-many class="Role" column="roleId"></many-to-many> </set> </class> </hibernate-mapping>
Department
/** * 实体:部门 * @author Jelly */ public class Department implements Serializable{ private Long id; private Set<User> users = new HashSet<User>(); private Department parent; private Set<Department> children = new HashSet<Department>(); }Department.hbm.xml
<hibernate-mapping package="com.hqu.oa.domain"> <class name="Department" table="hqu_department"> <id name="id"> <generator class="native" /> </id> <!-- users属性,本类与User的一对多关系 --> <set name="users"> <key column="departmentId"></key> <one-to-many class="User" /> </set> <!-- parnet属性,本类与Department(上级)的多对一 --> <many-to-one name="parent" class="Department" column="parentId"></many-to-one> <!-- children属性,本类与Department(下级)的一对多关系 --> <set name="children" cascade="delete" order-by="id"> <key column="parentId"></key> <one-to-many class="Department"/> </set> </class> </hibernate-mapping>
相关文章推荐
- Hibernate实体映射文件多对多等关系简单应用技巧
- Hibernate实体关系映射技巧
- javaEE 用户、部门、角色、权限实体的关系设计与hibernate映射配置文件关系总结
- Hibernate实体关系关联映射中配置文件的编写
- ant深入浅出(一)ant+xdoclet 生成hibernate配置文件以及实体映射文件
- 2012-12-14 16:38 hibernate 实体映射文件中 写 hql/sql 语句
- java类型、hibernate映射文件及SQL数据类型间的对应关系
- ant深入浅出(一)ant+xdoclet 生成hibernate配置文件以及实体映射文件
- Hibernate的对象-关系映射文件中出现的问题
- hibernate 实体关系映射笔记
- Hibernate,JPA 对象关系映射之简单映射策略
- Hibernate总结之二实体与表的映射关系
- Hibernate映射文件配置技巧 .
- 关于hibernate映射继承关系时独立的子类配置文件的问题
- hibernate 实体关系映射笔记
- Hibernate继承映射(反向映射到数据库) SchemaExport ,存在继承关系,从pojo文件映射出数据库文件
- Hibernate 根据实体映射文件自动生成表
- 23_Hibernate实体关系映射
- 解决使用Hibernate QBC复合查询含有联合主键映射关系实体的问题
- myEclipse通过表生成hibernate实体和映射文件