读书人

应用Hibernate Annotations 维护多对多

发布时间: 2012-10-31 14:37:32 作者: rapoo

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

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

??????上周六去电影院圆了儿时的梦想,看了变形金刚,超棒的一部片子 ^_^。那么就以剧院和观众为例讲解吧。

如何制作PO

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

应用Hibernate Annotations 维护多对多关系的心得import ?java.util.ArrayList;
应用Hibernate Annotations 维护多对多关系的心得 import ?java.util.List;
应用Hibernate Annotations 维护多对多关系的心得 import ?javax.persistence.CascadeType;
应用Hibernate Annotations 维护多对多关系的心得 import ?javax.persistence.Entity;
应用Hibernate Annotations 维护多对多关系的心得 import ?javax.persistence.FetchType;
应用Hibernate Annotations 维护多对多关系的心得 import ?javax.persistence.JoinColumn;
应用Hibernate Annotations 维护多对多关系的心得 import ?javax.persistence.JoinTable;
应用Hibernate Annotations 维护多对多关系的心得 import ?javax.persistence.ManyToMany;
应用Hibernate Annotations 维护多对多关系的心得 import ?javax.persistence.Table;
应用Hibernate Annotations 维护多对多关系的心得 import ?org.hibernate.annotations.Cache;
应用Hibernate Annotations 维护多对多关系的心得 import ?org.hibernate.annotations.CacheConcurrencyStrategy;


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

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

功能说明:
@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)找到霸天虎--被关联端:

应用Hibernate Annotations 维护多对多关系的心得应用Hibernate Annotations 维护多对多关系的心得/**?*//**
应用Hibernate Annotations 维护多对多关系的心得?*?Audience
应用Hibernate Annotations 维护多对多关系的心得?*?@author?allen
应用Hibernate Annotations 维护多对多关系的心得?*/
应用Hibernate Annotations 维护多对多关系的心得
应用Hibernate Annotations 维护多对多关系的心得@SuppressWarnings("serial")
应用Hibernate Annotations 维护多对多关系的心得@Entity
应用Hibernate Annotations 维护多对多关系的心得@Table(name?=?"AUDIENCE")
应用Hibernate Annotations 维护多对多关系的心得@Cache(usage?=?CacheConcurrencyStrategy.READ_WRITE)
应用Hibernate Annotations 维护多对多关系的心得应用Hibernate Annotations 维护多对多关系的心得public?class?Audience?implements?Serializable?应用Hibernate Annotations 维护多对多关系的心得{
应用Hibernate Annotations 维护多对多关系的心得????
应用Hibernate Annotations 维护多对多关系的心得????@ManyToMany(
应用Hibernate Annotations 维护多对多关系的心得应用Hibernate Annotations 维护多对多关系的心得???????????cascade=应用Hibernate Annotations 维护多对多关系的心得{CascadeType.PERSIST,CascadeType.MERGE},
应用Hibernate Annotations 维护多对多关系的心得???????????mappedBy="audiences"
应用Hibernate Annotations 维护多对多关系的心得????)
应用Hibernate Annotations 维护多对多关系的心得应用Hibernate Annotations 维护多对多关系的心得????/**?*//**?所在的剧院?*/
应用Hibernate Annotations 维护多对多关系的心得????private?List<Theater>?theaters?=?new?ArrayList<Theater>();
应用Hibernate Annotations 维护多对多关系的心得
应用Hibernate Annotations 维护多对多关系的心得应用Hibernate Annotations 维护多对多关系的心得????/**?*//**
应用Hibernate Annotations 维护多对多关系的心得?????*?@return?Returns?the?theaters.
应用Hibernate Annotations 维护多对多关系的心得?????*/
应用Hibernate Annotations 维护多对多关系的心得应用Hibernate Annotations 维护多对多关系的心得????public?List<Theater>?getTheaters()?应用Hibernate Annotations 维护多对多关系的心得{
应用Hibernate Annotations 维护多对多关系的心得????????return?theaters;
应用Hibernate Annotations 维护多对多关系的心得????}
应用Hibernate Annotations 维护多对多关系的心得
应用Hibernate Annotations 维护多对多关系的心得应用Hibernate Annotations 维护多对多关系的心得????/**?*//**
应用Hibernate Annotations 维护多对多关系的心得?????*?@param?theaters?The?theaters?to?set.
应用Hibernate Annotations 维护多对多关系的心得?????*/
应用Hibernate Annotations 维护多对多关系的心得应用Hibernate Annotations 维护多对多关系的心得????public?void?setTheaters(List<Theater>?theaters)?应用Hibernate Annotations 维护多对多关系的心得{
应用Hibernate Annotations 维护多对多关系的心得????????this.theaters?=?theaters;
应用Hibernate Annotations 维护多对多关系的心得????}
应用Hibernate Annotations 维护多对多关系的心得}

功能说明:
@ManyToMany注解
???? mappedBy属性:指定了主体端的属性名,用以绑定双方的关系???


汽车人,变形!--如何操作

应用Hibernate Annotations 维护多对多关系的心得应用Hibernate Annotations 维护多对多关系的心得/**?*//**
应用Hibernate Annotations 维护多对多关系的心得?????*?select?transformers?wathers?from?ShowMax?Theater
应用Hibernate Annotations 维护多对多关系的心得?????*/
应用Hibernate Annotations 维护多对多关系的心得应用Hibernate Annotations 维护多对多关系的心得????protected?void?selectWathers()?应用Hibernate Annotations 维护多对多关系的心得{
应用Hibernate Annotations 维护多对多关系的心得????????//1)?get?current?theater
应用Hibernate Annotations 维护多对多关系的心得????????Theater?theater?=?findTheaterById("showMax");
应用Hibernate Annotations 维护多对多关系的心得????????//2)?clear?theater's?audiences
应用Hibernate Annotations 维护多对多关系的心得????????theater.getAudiences().clear();
应用Hibernate Annotations 维护多对多关系的心得????????//3)?get?audiences?who?want?to?watch?transformers
应用Hibernate Annotations 维护多对多关系的心得????????List<Audience>?audiences?=?findAudiencesByMovie("transformers");
应用Hibernate Annotations 维护多对多关系的心得应用Hibernate Annotations 维护多对多关系的心得????????for?(Audience?a:?audiences)?应用Hibernate Annotations 维护多对多关系的心得{
应用Hibernate Annotations 维护多对多关系的心得????????????//4)?mountain?relations
应用Hibernate Annotations 维护多对多关系的心得????????????a.getTheaters().add(theater);
应用Hibernate Annotations 维护多对多关系的心得????????????theater.getAudiences().add(a);
应用Hibernate Annotations 维护多对多关系的心得????????}
应用Hibernate Annotations 维护多对多关系的心得????????//5)?do?save?main?entity
应用Hibernate Annotations 维护多对多关系的心得????????doSaveEntity(theater);
应用Hibernate Annotations 维护多对多关系的心得????}

tips:注意第二步的操作。

好了,大功告成!说回电影,红蜘蛛这小子跑得还挺快,期待续集!


PS:找到一份中文的hiberante?annotations reference,与大家共享。点击下载

读书人网 >软件架构设计

热点推荐