`
freeroy
  • 浏览: 72286 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate Annotations笔记

阅读更多
  1. 注意import javax.xx.Entity ,而不是org.hibernate.xx.Entity。  
  2. Descn属性不存在于数据库中,用@Transient 注明  
  3. ------------------------------------------  
  4. 1,需要: Hibernate库文件,Hibernate Annotations库,ejb3-persstence.jar(Java 持久化API)  
  5. sessionFactory=new AnnotationConfiguration().buildSessionFactory();  
  6. ------------------------------------------  
  7. 2,<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
  8.      <property name="annotatedClasses">  
  9.       <list>  
  10.         <value>com.onjava.modelplanes.domain.PlaneType</value>  
  11.       </list>  
  12.      </property>  
  13.  </bean>  
  14. ------------------------------------------  
  15. 1,@Entity  
  16. @Table(name = "teacher_info")  
  17. @IdClass(UUIDHexGenerator.class)   
  18. public class UserMember implements java.io.Serializable  
  19. 2,@entity通过getters/setters方法访问,或直接访问他的成员变量。  
  20. @Entity(access = AccessType.PROPERTY)  
  21. @Entity(access = AccessType.FIELD)  
  22. ------------------------------------------  
  23. 映射标识符  
  24. 1,@Id  
  25. @GeneratedValue(strategy = GenerationType.AUTO)  
  26. private String id;  
  27. 2,@Id(generate=GeneratorType.SEQUENCE, generator='SEQ_STORE')  
  28. 3,@Id(generate=GeneratorType.IDENTITY)  
  29. ------------------------------------------  
  30. 映射属性  
  31. 1,@Transient  
  32. 2,@Column(name="PLANE_ID"length=80nullable=true)  
  33. 3,@Basic(fetch = FetchType.LAZY)  
  34. 4,@Serialized 凡标识@Serialized的属性将被序列化  
  35. public Country getCountry() { ... }  
  36. 5,@Lob标识了存储对象可能是个CLOB或者BLOB。  
  37. @Lob(type=LobType.CLOB)  
  38. public String getFullText(){return fullText;}  
  39. @Lob(type = LobType.BLOB)  
  40. public byte[] getFullCode() {return fullCode;}  
  41. @Version 定义乐观锁机制使用  
  42. ------------------------------------------  
  43. 关联关系:  
  44. 一、一对一:  
  45. 1,@OneToOne(mappedBy = "address")      
  46. public User getUser() {      
  47.       return user;      
  48. }     
  49. 1、两边都定义了@OneToOne,但都没有定义mappedBy,则user和address表都会生成到对方的外键,双方都是这个关系的拥有者。   
  50. 2、两边都定义了@OneToOne,如果user定义了mappedBy,则在address表生成到user的外键,address是这个关系的拥有者;如果address定义  
  51. 了mappedBy,则在user表生成到address的外键,user是这个关系的拥有者。  
  52.   
  53. 二、一对多,多对一:  
  54. 2,@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )  
  55. 3,@OneToMany(mappedBy="planeType",cascade=CascadeType.ALL, fetch=FetchType.EAGER)  
  56. @OrderBy("name")  
  57. public List<ModelPlane> getModelPlanes() {  
  58.     return modelPlanes;  
  59. }  
  60. 其中定义mappedBy的是@OneToMany,也就是说One这一方是关系的拥有者。Many一方的表中生成到关联类的外键。   
  61.   
  62. 三、@ManyToMany    
  63. private Set authors = new HashSet<Author>();      
  64. @ManyToMany     
  65. public Set<Author> getAuthors(){      
  66. return authors;      
  67. }       
  68.      
  69. private Set books = new HashSet<Book>();       
  70. @ManyToMany(mappedBy="authors")      
  71. public Set<Book> getBooks(){      
  72. return books;      
  73. }      
  74. @ManyToMany会生成中间表,具体表名和字段可以通过@AssociationTable来定义,默认的就可以了,同样关系的非拥有者,需要定义mappedBy属性。  
  75. ------------------------------------------  
  76. 命名查询  
  77. 你也可以通过注解,利用@NameQueries和@NameQuery注解,如下:  
  78. @NamedQueries(  
  79. {   
  80. @NamedQuery(name="planeType.findAll",query="select p from PlaneType p" ),  
  81. @NamedQuery(name="planeType.delete",query="delete from PlaneType where id=:id" )  
  82.  }  
  83. )  
  84. ------------------------------------------  
  85. 内嵌对象(组件)  
  86. @Embedded({  
  87.    @AttributeOverride(name='iso2'column = @Column(name='bornIso2') ),  
  88.    @AttributeOverride(name='name'column = @Column(name='bornCountryName') )  
  89.          })  
  90.     Country bornIn;  
  91.     ...  
  92. }  
  93.   
  94. @Embeddable(access = AccessType.FIELD)  
  95. public class Address implements Serializable {  
  96.     String city;  
  97.     Country nationality;  
  98. }  
  99.   
  100.   
  101. @Embeddable  
  102. public class Country implements Serializable {  
  103.     private String iso2;  
  104.     private String name;  
  105.   
  106.     public String getIso2() { return iso2; }  
  107.     public void setIso2(String iso2) { this.iso2 = iso2; }  
  108.   
  109.     @Column(name='countryName')  
  110.     public String getName() { return name; }  
  111.     public void setName(String name) { this.name = name; }  
  112.     ...  
  113. }  
  114. ------------------------------------------  
  115. 自定义的主键生成策略  
  116. @javax.persistence.GeneratedIdTable(  
  117.    name='GEN_TABLE',  
  118.   table = @Table(name='GENERATOR_TABLE'),  
  119.     pkColumnName = 'key',  
  120.       valueColumnName = 'hi'  
  121. )  
  122.   
  123. @javax.persistence.TableGenerator(  
  124.     name='EMP_GEN',  
  125.     tableName='GEN_TABLE',  
  126.     pkColumnValue='EMP',  
  127.     allocationSize=20  
  128. )  
  129. @javax.persistence.SequenceGenerator(  
  130.     name='SEQ_GEN',  
  131.     sequenceName='my_sequence'  
  132. )  
  133. package org.hibernate.test.metadata;  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics