10、@OneToMany(fetch=FetchType,cascade=CascadeType)
可選
@OneToMany描述一個(gè)一對(duì)多的關(guān)聯(lián),該屬性應(yīng)該為集體類型,在數(shù)據(jù)庫中并沒有實(shí)際字段.
fetch:表示抓取策略,默認(rèn)為FetchType.LAZY,因?yàn)殛P(guān)聯(lián)的多個(gè)對(duì)象通常不必從數(shù)據(jù)庫預(yù)先讀取到內(nèi)存
cascade:表示級(jí)聯(lián)操作策略,對(duì)于OneToMany類型的關(guān)聯(lián)非常重要,通常該實(shí)體更新或刪除時(shí),其關(guān)聯(lián)的實(shí)體也應(yīng)當(dāng)被更新或刪除
例如:實(shí)體User和Order是OneToMany的關(guān)系,則實(shí)體User被刪除時(shí),其關(guān)聯(lián)的實(shí)體Order也應(yīng)該被全部刪除
示例:
@OneTyMany(cascade=ALL)
public List getOrders() {
return orders;
}
11、@OneToOne(fetch=FetchType,cascade=CascadeType)
可選
@OneToOne描述一個(gè)一對(duì)一的關(guān)聯(lián)
fetch:表示抓取策略,默認(rèn)為FetchType.LAZY
cascade:表示級(jí)聯(lián)操作策略
示例:
@OneToOne(fetch=FetchType.LAZY)
public Blog getBlog() {
return blog;
}
12、@ManyToMany
可選
@ManyToMany 描述一個(gè)多對(duì)多的關(guān)聯(lián).多對(duì)多關(guān)聯(lián)上是兩個(gè)一對(duì)多關(guān)聯(lián),但是在ManyToMany描述中,中間表是由ORM框架自動(dòng)處理
targetEntity:表示多對(duì)多關(guān)聯(lián)的另一個(gè)實(shí)體類的全名,例如:package.Book.class
mappedBy:表示多對(duì)多關(guān)聯(lián)的另一個(gè)實(shí)體類的對(duì)應(yīng)集合屬性名稱
示例:
User實(shí)體表示用戶,Book實(shí)體表示書籍,為了描述用戶收藏的書籍,可以在User和Book之間建立ManyToMany關(guān)聯(lián)
@Entity
public class User {
private List books;
@ManyToMany(targetEntity=package.Book.class)
public List getBooks() {
return books;
}
public void setBooks(List books) {
this.books=books;
}
}
@Entity
public class Book {
private List users;
@ManyToMany(targetEntity=package.Users.class, mappedBy="books")
public List getUsers() {
return users;
}
public void setUsers(List users) {
this.users=users;
}
}
兩個(gè)實(shí)體間相互關(guān)聯(lián)的屬性必須標(biāo)記為@ManyToMany,并相互指定targetEntity屬性,
需要注意的是,有且只有一個(gè)實(shí)體的@ManyToMany注解需要指定mappedBy屬性,指向targetEntity的集合屬性名稱
利用ORM工具自動(dòng)生成的表除了User和Book表外,還自動(dòng)生成了一個(gè)User_Book表,用于實(shí)現(xiàn)多對(duì)多關(guān)聯(lián)
13、@MappedSuperclass
可選
@MappedSuperclass可以將超類的JPA注解傳遞給子類,使子類能夠繼承超類的JPA注解
示例:
@MappedSuperclass
public class Employee() {
....
}
@Entity
public class Engineer extends Employee {
.....
}
@Entity
public class Manager extends Employee {
.....
}
14、@Embedded
可選
@Embedded將幾個(gè)字段組合成一個(gè)類,并作為整個(gè)Entity的一個(gè)屬性.
例如User包括id,name,city,street,zip屬性.
我們希望city,street,zip屬性映射為Address對(duì)象.這樣,User對(duì)象將具有id,name和address這三個(gè)屬性.
Address對(duì)象必須定義為@Embededable
示例:
@Embeddable
public class Address {city,street,zip}
@Entity
public class User {
@Embedded
public Address getAddress() {
..........
}
}