使用Hibernate Annotations 维护多对多关系的心得
来源:互联网 发布:linux reboot重启失败 编辑:程序博客网 时间:2024/06/09 19:39
在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 */@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; } }
功能说明:
@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属性:指定被关联端的外键
usage属性:给定了缓存的并发策略
3)找到观众类
/** * Audience */@SuppressWarnings("serial")@Entity@Table(name = "AUDIENCE")@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)public class Audience implements Serializable { @ManyToMany( cascade={CascadeType.PERSIST,CascadeType.MERGE}, mappedBy="audiences" ) /** 所在的剧院 */ private List<Theater> theaters = new ArrayList<Theater>(); /** * @return Returns the theaters. */ public List<Theater> getTheaters() { return theaters; } /** * @param theaters The theaters to set. */ public void setTheaters(List<Theater> theaters) { this.theaters = theaters; }}功能说明:
@ManyToMany注解
mappedBy属性:指定了主体端的属性名,用以绑定双方的关系
3):测试类
* select transformers wathers from ShowMax Theater
*/
protected void selectWathers() {
//1) get current theater
Theater theater = findTheaterById("showMax");
//2) clear theater's audiences
theater.getAudiences().clear();
//3) get audiences who want to watch transformers
List<Audience> audiences = findAudiencesByMovie("transformers");
for (Audience a: audiences) {
//4) mountain relations
a.getTheaters().add(theater);
theater.getAudiences().add(a);
}
//5) do save main entity
doSaveEntity(theater);
}
- 使用Hibernate Annotations 维护多对多关系的心得
- 使用Hibernate Annotations 维护多对多关系的心得
- 使用Hibernate Annotations 维护多对多关系的心得
- hibernate在没有主外键关系时是如何维护多对一等关联关系的
- 【Hibernate】设置inverse属性,在多对多种维护关联关系的影响?
- SSH框架之Hibernate的多对多映射、多对多关联关系维护(inverse)
- Hibernate一对多、多对一关联关系的使用
- Hibernate多对多关联关系的使用
- 对Hibernate中关系维护方和级联的理解
- Hibernate的多对多关联关系
- Hibernate的关系映射多对多
- hibernate实现多对多的关系
- Hibernate,多对多的关联关系
- hibernate单边的多对多关系
- hibernate双边的多对多关系
- Hibernate多对多的关系
- Hibernate的多对多关联关系
- hibernate的映射关系之一对多
- ASP.NET页面间数据传递的方法
- WEB调用JavaScript的方式
- 由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例,该连接将关闭的解决办法
- poj 1001 exponentiation
- 数据模型设计
- 使用Hibernate Annotations 维护多对多关系的心得
- oracle监听器(listener)配置心得
- 随笔
- iphone学习笔记--使用keychain保存用户名和密码
- ARM 9:S3C2440 FCLK, HCLK, PCLK时钟的关系
- 查询和分页 的 WSIMP
- OSI
- Android多媒体学习:实现仿百度图片查看功能
- 关于3C2440 FCLK, HCLK, PCLK的关系