Hibernate 可訪問任意可見性的 getter/setter(含 private),Java 應用程序僅能訪問 public。建議保持標準 JavaBean 規範(public getter/setter),提高領域模型透明度。
| 類型 | 運算 | null 表達 | 默認值 | 適用場景 |
|---|---|---|---|---|
| 基本類型 | 直接支援 | 不可表達 | 0/false | 業務上必填、有默認語義 |
| 包裝類型 | 需拆箱 | 原生支援 null | null | 業務上可選、null 有特定含義 |
映射配置相同:<property name="price" type="double" column="PRICE"/>
<property name="name" access="field"/>PropertyAccessor 接口,指定全限定類名類中無 name 字段,但通過 getName() 組合 firstName + lastName,映射文件只需:
<property name="name" column="NAME"/>
HQL 可直接查詢:from Customer c where c.name='tom'
public void setOrders(Set orders) {
this.orders = orders;
calcPrice(); // 觸發衍生計算
}
public void setSex(char sex) {
if (sex != 'M' && sex != 'F') throw new IllegalArgumentException("Invalid sex");
this.sex = sex;
}
<property name="totalPrice" formula="(select sum(o.PRICE) from ORDERS o where o.CUSTOMER_ID=ID)"/>| 屬性/元素 | 作用 | 默認值 |
|---|---|---|
| <property> insert | false 則 INSERT 不包含該列 | true |
| <property> update | false 則 UPDATE 不包含該列 | true |
| <class> mutable | false 則整個實體不可更新 | true |
| <property> dynamic-insert | true 則僅非 null 列進入 INSERT | false |
| <property> dynamic-update | true 則僅非 null 列進入 UPDATE | false |
| <class> dynamic-insert/update | 類級別控制所有屬性 | false |
列名含特殊字符/關鍵字時使用反引號:
<property name="description" column="`CUSTOMER DESCRIPTION`"/>
同包多類映射文件可設置 <hibernate-mapping package="com.example.model">,避免重複寫全限定類名。