- 1、 Identifiers
UNIQUE:每行唯一
NOT NULL:
IMMUTABLE:once inserted, can never be changed
- 2、GenerationType生成值
AUTO(默認(rèn)):表示持久性提供程序(Hibernate)應(yīng)選擇適當(dāng)?shù)纳刹呗?br> IDENTITY:表示數(shù)據(jù)庫IDENTITY列將用于生成主鍵值
SEQUENCE:表示數(shù)據(jù)庫序列應(yīng)用于獲取主鍵值
TABLE:表示應(yīng)使用數(shù)據(jù)庫表獲取主鍵值
隱式使用UUID策略
@Id
@GeneratedValue( generator = "uuid" )
@GenericGenerator(
name = "uuid",
strategy = "org.hibernate.id.UUIDGenerator",
parameters = {
@Parameter(
name = "uuid_gen_strategy_class",
value = "org.hibernate.id.uuid.CustomVersionOneStrategy"
)
}
)
public UUID id;
- 3昵慌、關(guān)系映射
父方:
@OneToMany(mappedBy = "person", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Phone> phones = new ArrayList<>();
@OneToOne(mappedBy = "phone", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private PhoneDetails details;
子方:
@ManyToOne
private Person person;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "phone_id")
private Phone phone;
- 4夷家、集合
兩個(gè)實(shí)體不能共享同一個(gè)集合的引用
集合值屬性不支持空值語義(hibernate不區(qū)分空集合和空集合引用)
- 5价认、NaturalIdLoadAccess 自然編號(hào)
API:load()獲取對(duì)實(shí)體的引用(該實(shí)體已初始化)
getReference():獲取引用
@NaturalId(mutable=true):默認(rèn)為不可改,mutable=true時(shí)可變
- 5潦蝇、繼承
父實(shí)體@MappedSuperclass:在域模型中體現(xiàn),不在數(shù)據(jù)庫模式中反應(yīng)深寥,不支持多態(tài)查詢
single table:@Inheritance(strategy = InheritanceType.SINGLE_TABLE)攘乒,所有子類映射到同一個(gè)數(shù)據(jù)庫表,每個(gè)子類必須定義唯一的標(biāo)識(shí)符值惋鹅,所以查詢效率最高则酝,只需單表
Joined table:@Inheritance(strategy = InheritanceType.JOINED)每個(gè)類有自己的表,超類表關(guān)聯(lián)關(guān)系负饲。該表主鍵為超類表的外鍵堤魁,該表@PrimaryKeyJoinColumn(name = "account_id")設(shè)置外鍵
Table per class:@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)喂链,各存各的,考慮多態(tài)關(guān)聯(lián)妥泉,使用union