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>

         到这里大家就对其的映射技巧有所了解了吧,多实践,将其熟练的运用,想忘都忘不了。


       

        

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 53
    评论
评论 53
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值