天天看點

JPA使用指南 javax.persistence的注解配置

  

要注意的是:fetch = FetchType.EAGER這句話在一個類裡面隻能出現一次,出現兩次就會報錯“cannot simultaneously fetch multiple bags”,要把其他的改為fetch = FetchType.LAZY延遲加載就可以了。聽說把List集合改為Set也能解決這個錯誤。 

其他要點: 

1、@Table(name="T_X")這句話可以不寫,不寫就已類名作為表名 

2、如果想讓兩個類的屬性生成一個資料表,在一個類裡這樣加入另一個類即可: @Embedded 

private C c; 

3、如果想要一個類繼承另一個類的所有屬性,則在父類裡這樣寫: 

@SuppressWarnings("serial") 

@Entity 

@MappedSuperclass   //增加這一行 

并把父類的所有屬性的private改為protected即可 

4、建議在一對多關聯中在"一"方用延遲加載"多"方可以在HQL中顯式的"迫切左外連接配接" left join fetch 這樣做Hibernate可以少通路資料庫,也可以用"@BatchSize(size = 5)"來減少通路資料庫的次數 

@Id 聲明屬性為主鍵 

@GeneratedValue表示主鍵是自動生成政策,一般該注釋和 @Id 一起使用 

@Entity 任何 hibernte 映射對象都要有次注釋 

@Table(name = “tablename”) 類聲明此對象映射到哪個表 

@Column(name = “Name”,nullable=false,length=32) 聲明資料 庫字段和類屬性對應關系 

@Lob 聲明字段為 Clob 或 Blob 類型

@OneToMany(mappedBy=”order”,cascade = CascadeType.ALL, fetch = FetchType.LAZY) 

   @OrderBy(value = “id ASC”) 

   一對多聲明,和 ORM 産品聲明類似,一看就明白了。 

   @ManyToOne(cascade=CascadeType.REFRESH,optional=false) 

   @JoinColumn(name = “order_id”) 

   聲明為雙向關聯 

@Temporal(value=TemporalType.DATE) 做日期類型轉換。 

@OneToOne(optional= true,cascade = CascadeType.ALL, mappedBy = “person”) 

   一對一關聯聲明 

   @OneToOne(optional = false, cascade = CascadeType.REFRESH) 

   @JoinColumn(name = “Person_ID”, referencedColumnName = “personid”,unique = true) 

 @ManyToMany(mappedBy= “students”) 

   多對多關聯聲明。 

  @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) 

  @JoinTable(name = “Teacher_Student”, 

    joinColumns = {@JoinColumn(name = “Teacher_ID”, referencedColumnName = “teacherid”)}, 

    inverseJoinColumns = {@JoinColumn(name = “Student_ID”, referencedColumnName = 

    “studentid”)}) 

   多對多關聯一般都有個關聯表,是這樣聲明的! 

 @Transiten表示此屬性與表沒有映射關系,是一個暫時的屬性 

@Cache(usage= CacheConcurrencyStrategy.READ_WRITE)表示此對象應用緩存 

JPA 與 hibernate關系