zoukankan      html  css  js  c++  java
  • 使用Hibernate Annotations 维护多对多关系

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

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

    如何制作PO

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

    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系 import  java.util.ArrayList;
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
     import  java.util.List;
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
     import  javax.persistence.CascadeType;
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
     import  javax.persistence.Entity;
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
     import  javax.persistence.FetchType;
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
     import  javax.persistence.JoinColumn;
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
     import  javax.persistence.JoinTable;
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
     import  javax.persistence.ManyToMany;
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
     import  javax.persistence.Table;
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
     import  org.hibernate.annotations.Cache;
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
     import  org.hibernate.annotations.CacheConcurrencyStrategy;

    2)找到汽车人--主体端:
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系@SuppressWarnings(
    "serial")
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系@Entity
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系@Table(name 
    = "THEATER")
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系@Cache(usage 
    = CacheConcurrencyStrategy.READ_WRITE)
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
    public class Theater implements Serializable {
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    @ManyToMany(
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系            targetEntity
    =net.allen.domain.Audience.class,
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系            cascade 
    ={CascadeType.PERSIST,CascadeType.MERGE},
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系            fetch
    =FetchType.LAZY
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    )
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    @JoinTable(
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系            name
    ="THEATER_AUDIENCE",
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系            joinColumns
    ={@JoinColumn(name="THEATER_ID")},
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系            inverseJoinColumns
    ={@JoinColumn(name="AUDIENCE_ID")}
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    )
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    @Cache(usage 
    = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    
    private List<Audience> audiences = new ArrayList<Audience>();
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    

    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    
    public List<Audience> getAudiences() {
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系        
    return audiences;
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系     }

    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    

    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    
    public void setAudiences(List<Audience> audiences) {
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系        
    this.audiences = audiences;
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系     }
        
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系 }

    功能说明:
    @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 <wbr>Annotations <wbr>维护多对多关系
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系@SuppressWarnings(
    "serial")
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系@Entity
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系@Table(name 
    = "AUDIENCE")
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系@Cache(usage 
    = CacheConcurrencyStrategy.READ_WRITE)
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
    public class Audience implements Serializable {
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    @ManyToMany(
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系           cascade
    ={CascadeType.PERSIST,CascadeType.MERGE},
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系           mappedBy
    ="audiences"
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    )
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    

    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    
    private List<Theater> theaters = new ArrayList<Theater>();
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    

    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    
    public List<Theater> getTheaters() {
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系        
    return theaters;
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系     }

    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    

    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    
    public void setTheaters(List<Theater> theaters) {
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系        
    this.theaters = theaters;
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系     }

    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系 }
    功能说明:
    @ManyToMany注解
         mappedBy属性:指定了主体端的属性名,用以绑定双方的关系   


    汽车人,变形!--如何操作
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系    
    protected void selectWathers() {
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系        
    //1) get current theater
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
            Theater theater = findTheaterById("showMax");
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系        
    //2) clear theater's audiences
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
            theater.getAudiences().clear();
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系        
    //3) get audiences who want to watch transformers
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
            List<Audience> audiences = findAudiencesByMovie("transformers");
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系        
    for (Audience a: audiences) {
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系            
    //4) mountain relations
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
                a.getTheaters().add(theater);
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系            theater.getAudiences().add(a);
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系         }

    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系        
    //5) do save main entity
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系
            doSaveEntity(theater);
    【转】使用Hibernate <wbr>Annotations <wbr>维护多对多关系     }

    tips:注意第二步的操作。

     

    以上内容转自http://www.blogjava.net/allen-zhe/archive/2007/08/02/133991.html 留作备用

  • 相关阅读:
    基于SSM框架web搜索功能的实现
    使用APICloud打包webapp
    mac如何运行vue项目
    前端和算法实现:给网站上加上自己的水印(以后用上)
    jQuery常用代码片段
    关于vscode的个人配置
    听说你想用git,安装一下咯
    vue创建项目的一种方法
    用js控制css动画效果@keyframes
    axios的封装和拦截
  • 原文地址:https://www.cnblogs.com/live365wang/p/1993726.html
Copyright © 2011-2022 走看看