gdufo

           

          Hibernate Annotations筆記

          轉:http://www.aygfsteel.com/gkm422/archive/2007/11/21/162214.html

          注意import javax.xx.Entity ,而不是org.hibernate.xx.Entity。  
          Descn屬性不存在于數據庫中,用@Transient 注明  
          ------------------------------------------  
          1,需要: Hibernate庫文件,Hibernate Annotations庫,ejb3-persstence.jar(Java 持久化API)  
          sessionFactory=new AnnotationConfiguration().buildSessionFactory();  
          ------------------------------------------  
          2,<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
               <property name="annotatedClasses">  
                <list>  
                  <value>com.onjava.modelplanes.domain.PlaneType</value>  
                </list>  
               </property>  
           </bean>  
          ------------------------------------------  
          1,@Entity  
          @Table(name = "teacher_info")  
          @IdClass(UUIDHexGenerator.class)   
          public class UserMember implements java.io.Serializable  
          2,@entity通過getters/setters方法訪問,或直接訪問他的成員變量。  
          @Entity(access = AccessType.PROPERTY)  
          @Entity(access = AccessType.FIELD)  
          ------------------------------------------  
          映射標識符  
          1,@Id  
          @GeneratedValue(strategy = GenerationType.AUTO)  
          private String id;  
          2,@Id(generate=GeneratorType.SEQUENCE, generator='SEQ_STORE')  
          3,@Id(generate=GeneratorType.IDENTITY)  
          ------------------------------------------  
          映射屬性  
          1,@Transient  
          2,@Column(name="PLANE_ID", length=80, nullable=true)  
          3,@Basic(fetch = FetchType.LAZY)  
          4,@Serialized 凡標識@Serialized的屬性將被序列化  
          public Country getCountry() { ... }  
          5,@Lob標識了存儲對象可能是個CLOB或者BLOB。  
          @Lob(type=LobType.CLOB)  
          public String getFullText(){return fullText;}  
          @Lob(type = LobType.BLOB)  
          public byte[] getFullCode() {return fullCode;}  
          @Version 定義樂觀鎖機制使用  
          ------------------------------------------  
          關聯關系:  
          一、一對一:  
          1,@OneToOne(mappedBy = "address")      
          public User getUser() {      
                return user;      
          }     
          1、兩邊都定義了@OneToOne,但都沒有定義mappedBy,則user和address表都會生成到對方的外鍵,雙方都是這個關系的擁有者。   
          2、兩邊都定義了@OneToOne,如果user定義了mappedBy,則在address表生成到user的外鍵,address是這個關系的擁有者;如果address定義  
          了mappedBy,則在user表生成到address的外鍵,user是這個關系的擁有者。  
            
          二、一對多,多對一:  
          2,@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )  
          3,@OneToMany(mappedBy="planeType",cascade=CascadeType.ALL, fetch=FetchType.EAGER)  
          @OrderBy("name")  
          public List<ModelPlane> getModelPlanes() {  
              return modelPlanes;  
          }  
          其中定義mappedBy的是@OneToMany,也就是說One這一方是關系的擁有者。Many一方的表中生成到關聯類的外鍵。   
            
          三、@ManyToMany    
          private Set authors = new HashSet<Author>();      
          @ManyToMany     
          public Set<Author> getAuthors(){      
          return authors;      
          }       
               
          private Set books = new HashSet<Book>();       
          @ManyToMany(mappedBy="authors")      
          public Set<Book> getBooks(){      
          return books;      
          }      
          @ManyToMany會生成中間表,具體表名和字段可以通過@AssociationTable來定義,默認的就可以了,同樣關系的非擁有者,需要定義mappedBy屬性。  
          ------------------------------------------  
          命名查詢  
          你也可以通過注解,利用@NameQueries和@NameQuery注解,如下:  
          @NamedQueries(  
          {   
          @NamedQuery(name="planeType.findAll",query="select p from PlaneType p" ),  
          @NamedQuery(name="planeType.delete",query="delete from PlaneType where id=:id" )  
           }  
          )  
          ------------------------------------------  
          內嵌對象(組件)  
          @Embedded({  
             @AttributeOverride(name='iso2', column = @Column(name='bornIso2') ),  
             @AttributeOverride(name='name', column = @Column(name='bornCountryName') )  
                   })  
              Country bornIn;  
              ...  
          }  
            
          @Embeddable(access = AccessType.FIELD)  
          public class Address implements Serializable {  
              String city;  
              Country nationality;  
          }  
            
            
          @Embeddable  
          public class Country implements Serializable {  
              private String iso2;  
              private String name;  
            
              public String getIso2() { return iso2; }  
              public void setIso2(String iso2) { this.iso2 = iso2; }  
            
              @Column(name='countryName')  
              public String getName() { return name; }  
              public void setName(String name) { this.name = name; }  
              ...  
          }  
          ------------------------------------------  
          自定義的主鍵生成策略  
          @javax.persistence.GeneratedIdTable(  
             name='GEN_TABLE',  
            table = @Table(name='GENERATOR_TABLE'),  
              pkColumnName = 'key',  
                valueColumnName = 'hi'  
          )  
            
          @javax.persistence.TableGenerator(  
              name='EMP_GEN',  
              tableName='GEN_TABLE',  
              pkColumnValue='EMP',  
              allocationSize=20  
          )  
          @javax.persistence.SequenceGenerator(  
              name='SEQ_GEN',  
              sequenceName='my_sequence'  
          )  
          package org.hibernate.test.metadata;  

          posted on 2008-08-10 08:13 gdufo 閱讀(172) 評論(0)  編輯  收藏

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 望城县| 迭部县| 肃南| 富锦市| 阿拉尔市| 游戏| 鄄城县| 呼和浩特市| 武平县| 崇仁县| 洞头县| 沈阳市| 安新县| 页游| 绥滨县| 军事| 曲阜市| 洛宁县| 故城县| 南川市| 郎溪县| 深水埗区| 绵阳市| 克山县| 惠来县| 武夷山市| 乌恰县| 漳平市| 米林县| 元江| 温州市| 莒南县| 玉龙| 承德县| 丰台区| 门头沟区| 桑日县| 贵州省| 乌鲁木齐市| 宁波市| 桐庐县|