abstractembeddedcomponents.propertyref

   
       
           
       

       
       
           
           
       

   

   
   

   
       
           
       

       
       
   

   
                             class="AddressImpl"
                     property-ref="uniqueAddress"
                     cascade="all"
                     unique="true"
                     update="false"
                     insert="false">
           
           
       

   

 

这种ref 用于兼容过去的数据库,a表的属性A1 参照b表的属性B1,但是B1又不是组件,在这种条件下使用ref。

定义复合组件


           
           
       

引用2个属性 说以要用properties

name column type length

 

                     class="AddressImpl"
                     property-ref="uniqueAddress"
                     cascade="all"
                     unique="true"
                     update="false"
                     insert="false">
           
           
       

 

这里因为有2个属性,不能写到一个many-to-one中 ,所以作为many-to-one的子标签出现。

 

session.createQuery( "from Server s join fetch s.address" ).list(); 这条语句只会返回Server结果 ,同时通过Fetch 把address属性也查找出来。

 select
        server0_.SERVER_ID as SERVER1_1_0_,
        addressimp1_.ADDRESS_ID as ADDRESS1_0_1_,
        server0_.SERVER_TYPE as SERVER2_1_0_,
        server0_.ADDRESS_TYPE as ADDRESS3_1_0_,
        addressimp1_.ADDRESS_TYPE as ADDRESS2_0_1_,
        addressimp1_.SERVER_ID as SERVER3_0_1_
    from
        SERVER server0_
    inner join
        ADDRESS addressimp1_
            on server0_.ADDRESS_TYPE=addressimp1_.ADDRESS_TYPE
            and server0_.SERVER_ID=addressimp1_.SERVER_ID
            and addressimp1_.ADDRESS_TYPE='2'

注意这里on条件,使用了非主键属性关联的,而不是通常意义上的主键,外键关联,说明refproperties起作用了。

 

 

Fetch作用

在我们查询Parent对象的时候,默认只有Parent的内容,并不包含childs的信息,如果在Parent.hbm.xml里设置lazy="false"的话才同时取出关联的所有childs内容.
问题是我既想要hibernate默认的性能又想要临时的灵活性该怎么办?  这就是fetch的功能。我们可以把fetch与lazy="true"的关系类比为事务当中的编程式事务与声明式事务,不太准确,但是大概是这个意思。
总值,fetch就是在代码这一层给你一个主动抓取得机会.


 

你可能感兴趣的:(abstractembeddedcomponents.propertyref)