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