本文主要是介绍Hibernate实体关系映射技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
关于实体关系的映射,常用三种,多对一,一对多和多对多,模板如下。
实体映射的书写是有一定的技巧的,下面以一个权限的实体为例,与大家一起分享。
<span style="font-size:18px;">package cn.itcast.oa.domain;import java.util.HashSet;
import java.util.Set;/*** 权限* @author David**/
public class Privilege {private Long id;private String url;private String name; //权限名称private Set<Role> roles = new HashSet<Role>();private Privilege parent;//上级权限private Set<Privilege> children = new HashSet<Privilege>();//下级权限public Privilege() {}public Privilege(String url, String name, Privilege parent) {super();this.url = url;this.name = name;this.parent = parent;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<Role> getRoles() {return roles;}public void setRoles(Set<Role> roles) {this.roles = roles;}public Privilege getParent() {return parent;}public void setParent(Privilege parent) {this.parent = parent;}public Set<Privilege> getChildren() {return children;}public void setChildren(Set<Privilege> children) {this.children = children;}}
</span>
从上面代码可以看出,权限中有上级和下级,关系是一对多。
下面展示写代码的技巧。
1、写注释,
格式为?属性,表达的是本对象与?与?关系。
<span style="font-size:18px;"><!-- parent属性,本类与Privilege(上级)的多对一 --><!-- children属性,本类与Privilege(下级)的一对多 --></span>
2、拷模板
将上面对应的模板复制过来。
<span style="font-size:18px;"><!-- parent属性,本类与Privilege(上级)的多对一 --><many-to-one name="" class="" column=""></many-to-one><!-- children属性,本类与Privilege(下级)的一对多 --><set name=""><key column=""></key><one-to-many class=""/></set></span>
3、填空
name属性:属性名(注释中的第1问号)
class属性:关联的实体类型(注释中的第2个问号)
column属性:<many-to-one column="..">:一般可以写成属性名加Id后缀,如属性为department,则column值写成departmentId.一对多种的<key column="..">:从关联的对方(对方是多对一)映射中把column值拷贝过来。
<span style="font-size:18px;"><!-- parent属性,本类与Privilege(上级)的多对一 --><many-to-one name="parent" class="Privilege" column="parentId"></many-to-one><!-- children属性,本类与Privilege(下级)的一对多 --><set name="children"><key column="parentId"></key><one-to-many class="Privilege"/></set></span>
从实体代码中还可以看出, 实体Privilege和Role实体是多对多的关系。实体映射与上面同理,不再展示详细过程,只说不同之处。
多对多的关系在填空的时候遵守规则:多对多种的<key column="...">:一般可以写成本对象的名加Id后缀,如本对象名为User,则写成userId。多对多种的<many-to-many column="...">:一般可以写为关联对象的名称加Id后缀。
<span style="font-size:18px;"><!-- roles属性,本类与Role的多对多 --><set name="roles" table="itcast_role_privilege"><key column="privilegeId"></key><many-to-many class="Role" column="roleId"></many-to-many></set></span>
到这里大家就对其的映射技巧有所了解了吧,多实践,将其熟练的运用,想忘都忘不了。
这篇关于Hibernate实体关系映射技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!