快速业务通道

使用Hibernate Annotations维护多对多关系的心得 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

使用Hibernate Annotations维护多对多关系的心得

时间:2011-08-11

说明

在HibernateAnnotations中通过@ManyToMany注解可定义多对多关联。同时,也需要通过注解@JoinTable描述关联表和关联条件。对于双向关联,其中一端必须定义为owner,另一端必须定义为inverse(在对关联表进行更性操作时这一端将被忽略)。被关联端不必也不能描述物理映射,只需要一个简单的mappedBy参数,该参数包含了主体端的属性名,这样就绑定了双方的关系。

如何制作PO

1)找到CUBE--需要引入哪些类:

import java.util.ArrayList; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.Table; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy;

2)找到汽车人--主体端:

/** *//** * Theater * @author allen */ @SuppressWarnings("serial") @Entity @Table(name = "THEATER") @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class Theater implements Serializable {    @ManyToMany(        targetEntity=net.allen.domain.Audience.class,        cascade ={CascadeType.PERSIST,CascadeType.MERGE},        fetch=FetchType.LAZY    )    @JoinTable(        name="THEATER_AUDIENCE",        joinColumns={@JoinColumn(name="THEATER_ID")},        inverseJoinColumns={@JoinColumn(name="AUDIENCE_ID")}    )    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)    private List<Audience> audiences = new ArrayList<Audience>();    /** *//**    * @return Returns the audiences.    */    public List<Audience> getAudiences() {      return audiences;    }    /** *//**    * @param audiences The audiences to set.    */    public void setAudiences(List<Audience> audiences) {      this.audiences = audiences;    } }

使用Hibernate Annotations维护多对多关系的心得(2)

时间:2011-08-11

功能说明:

@ManyToMany注解

targetEntity属性:指向被关联端的实体对象

cascade属性:与Hibernate xml配置文件中的意思一样,这里选用两种方式

CascadeType.PERSIST:若实体是处于被管理状态,或当persist()方法被调用时,触发级联创建(create)操作。

CascadeType.MERGE:若实体是处于被管理状态,或当merge)方法被调用时,触发级联合并(merge)操作。

其它属性如CascadeType.REMOVE、CascadeType.REFRESH、CascadeType.ALL等属性可参考Hibernate Annotations Reference。

fetch属性:关联关系获取方式

LAZY(默认值)在第一次访问关联对象时才触发相应的查询操作。

另一个值EAGER是通过out join select直接获取关联对象

@JoinTable注解

name属性:指定关联表名 若不指定Hibernate可以根据既定的规则自动生成(具体规则见reference)

joinColumns属性:指定主体端的外键

inverseJoinColumns属性:指定被关联端的外键

@Cache注解

usage属性:给定了缓存的并发策略

3)找到霸天虎--被关联端:

/** *//** * Audience * @author allen */ @SuppressWarnings("serial") @Entity @Table(name = "AUD

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号