日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/21 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JPA使用指南 javax.persistence的注解配置 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
@SuppressWarnings("serial") @Entity @Table(name="T_X") public class X implements Serializable {@Id@GeneratedValue(strategy = GenerationType.AUTO)private int id;@Column(length=32)private String name;@Transient //表示此數(shù)據(jù)不在數(shù)據(jù)庫(kù)表里建立屬性private String temp;@Temporal(TemporalType.TIMESTAMP) //這個(gè)是帶時(shí)分秒的類型private Date date;@OneToOne(cascade = CascadeType.ALL, mappedBy = "x")private A a; } @SuppressWarnings("serial") @Entity @Table(name="T_A") public class A implements Serializable {@Id@GeneratedValue(strategy = GenerationType.AUTO)private int id;@OneToMany(cascade = CascadeType.ALL, mappedBy = "a", fetch = FetchType.EAGER)private List<B> b = new ArrayList<B>();@OneToOne()@JoinColumn(name = "x_Id") //加這句后就會(huì)雙方共同維護(hù)關(guān)系private X x; }@SuppressWarnings("serial") @Entity public class B implements Serializable{@Id@GeneratedValue(strategy = GenerationType.AUTO)protected int id;@ManyToOne()@JoinColumn(name = "a_id")protected A a; }

  

?

要注意的是:fetch = FetchType.EAGER這句話在一個(gè)類里面只能出現(xiàn)一次,出現(xiàn)兩次就會(huì)報(bào)錯(cuò)“cannot simultaneously fetch multiple bags”,要把其他的改為fetch = FetchType.LAZY延遲加載就可以了。聽說把List集合改為Set也能解決這個(gè)錯(cuò)誤。?

?

其他要點(diǎn):?
1、@Table(name="T_X")這句話可以不寫,不寫就已類名作為表名?

2、如果想讓兩個(gè)類的屬性生成一個(gè)數(shù)據(jù)表,在一個(gè)類里這樣加入另一個(gè)類即可: @Embedded?
private C c;?


3、如果想要一個(gè)類繼承另一個(gè)類的所有屬性,則在父類里這樣寫:?
@SuppressWarnings("serial")?
@Entity?
@MappedSuperclass?? //增加這一行?
并把父類的所有屬性的private改為protected即可?


4、建議在一對(duì)多關(guān)聯(lián)中在"一"方用延遲加載"多"方可以在HQL中顯式的"迫切左外連接" left join fetch 這樣做Hibernate可以少訪問數(shù)據(jù)庫(kù),也可以用"@BatchSize(size = 5)"來減少訪問數(shù)據(jù)庫(kù)的次數(shù)?

@Id 聲明屬性為主鍵?

@GeneratedValue表示主鍵是自動(dòng)生成策略,一般該注釋和 @Id 一起使用?

@Entity 任何 hibernte 映射對(duì)象都要有次注釋?

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

@Column(name = “Name”,nullable=false,length=32) 聲明數(shù)據(jù) 庫(kù)字段和類屬性對(duì)應(yīng)關(guān)系?

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

@OneToMany(mappedBy=”order”,cascade = CascadeType.ALL, fetch = FetchType.LAZY)?
?? @OrderBy(value = “id ASC”)?
?? 一對(duì)多聲明,和 ORM 產(chǎn)品聲明類似,一看就明白了。?
?? @ManyToOne(cascade=CascadeType.REFRESH,optional=false)?
?? @JoinColumn(name = “order_id”)?
?? 聲明為雙向關(guān)聯(lián)?

?

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

@OneToOne(optional= true,cascade = CascadeType.ALL, mappedBy = “person”)?
?? 一對(duì)一關(guān)聯(lián)聲明?
?? @OneToOne(optional = false, cascade = CascadeType.REFRESH)?
?? @JoinColumn(name = “Person_ID”, referencedColumnName = “personid”,unique = true)?
?? 聲明為雙向關(guān)聯(lián)?

?

?@ManyToMany(mappedBy= “students”)?
?? 多對(duì)多關(guān)聯(lián)聲明。?
? @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”)})?
?? 多對(duì)多關(guān)聯(lián)一般都有個(gè)關(guān)聯(lián)表,是這樣聲明的!?

?

?@Transiten表示此屬性與表沒有映射關(guān)系,是一個(gè)暫時(shí)的屬性?

@Cache(usage= CacheConcurrencyStrategy.READ_WRITE)表示此對(duì)象應(yīng)用緩存?


JPA 與 hibernate關(guān)系

?

1,JPA(Java Persistence API)是Sun官方提出的Java持久化規(guī)范。它為Java開發(fā)人員提供了一種對(duì)象/關(guān)系映射工具來管理Java應(yīng)用中的關(guān)系數(shù)據(jù)。,而Hibernate是它的一種實(shí)現(xiàn)。除了Hibernate,還有EclipseLink(曾經(jīng)的toplink),OpenJPA等可供選擇,所以使用Jpa的一個(gè)好處是,可以更換實(shí)現(xiàn)而不必改動(dòng)太多代碼。

2,Hibernate作為JPA的一種實(shí)現(xiàn),jpa的注解已經(jīng)是hibernate的核心,hibernate只提供了一些補(bǔ)充,而不是兩套注解。hibernate對(duì)jpa的支持夠足量,在使用hibernate注解建議使用jpa。

總結(jié)

以上是生活随笔為你收集整理的JPA使用指南 javax.persistence的注解配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。