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 閱讀(173) 評論(0)  編輯  收藏

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 西充县| 凤凰县| 丹棱县| 紫云| 石柱| 南汇区| 临江市| 邹城市| 临漳县| 石台县| 桑日县| 扎兰屯市| 明光市| 青神县| 峨眉山市| 武威市| 庆城县| 吉隆县| 蕲春县| 屏南县| 邯郸市| 墨脱县| 潢川县| 都昌县| 黑龙江省| 盐山县| 阳春市| 无极县| 云浮市| 高雄市| 宁都县| 海丰县| 久治县| 宝山区| 宁明县| 大姚县| 山西省| 长春市| 繁昌县| 盐城市| 额尔古纳市|