- 1、 Identifiers
UNIQUE:每行唯一
NOT NULL:
IMMUTABLE:once inserted, can never be changed
- 2、GenerationType生成值
AUTO(默認):表示持久性提供程序(Hibernate)應選擇適當的生成策略
IDENTITY:表示數據庫IDENTITY列將用于生成主鍵值
SEQUENCE:表示數據庫序列應用于獲取主鍵值
TABLE:表示應使用數據庫表獲取主鍵值
隱式使用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、關系映射
父方:
@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、集合
兩個實體不能共享同一個集合的引用
集合值屬性不支持空值語義(hibernate不區分空集合和空集合引用)
- 5、NaturalIdLoadAccess 自然編號
API:load()獲取對實體的引用(該實體已初始化)
getReference():獲取引用
@NaturalId(mutable=true):默認為不可改,mutable=true時可變
- 5、繼承
父實體@MappedSuperclass:在域模型中體現,不在數據庫模式中反應,不支持多態查詢
single table:@Inheritance(strategy = InheritanceType.SINGLE_TABLE),所有子類映射到同一個數據庫表,每個子類必須定義唯一的標識符值,所以查詢效率最高,只需單表
Joined table:@Inheritance(strategy = InheritanceType.JOINED)每個類有自己的表,超類表關聯關系。該表主鍵為超類表的外鍵,該表@PrimaryKeyJoinColumn(name = "account_id")設置外鍵
Table per class:@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS),各存各的,考慮多態關聯,使用union