@Column 註解完整屬性表
| 屬性 | 預設值 | 說明 |
| name | 屬性名 | 資料庫欄位名稱 |
| nullable | true | 是否允許 NULL |
| unique | false | 是否唯一約束 |
| length | 255 | 字串欄位長度 |
| precision/scale | 0 | 數值精度/小數位 |
| columnDefinition | "" | 原生 DDL 片段(如 "TEXT NOT NULL") |
| secondaryTable | "" | 指定副表名稱 |
| insertable/updatable | true | 是否參與 INSERT/UPDATE |
EntityManager 介面完整定義
public interface EntityManager {
void persist(Object entity);
T merge(T entity);
void remove(Object entity);
T find(Class cls, Object pk);
void flush();
Query createQuery(String ejbql);
Query createNamedQuery(String name);
Query createNativeQuery(String sql);
void refresh(Object entity);
void evict(Object entity); // 從持久化上下文移除
boolean contains(Object entity);
}
實戰範例:學生成績管理(同 131813 結構)
Student @OneToMany(cascade=ALL, fetch=EAGER) Score
TeacherBean @Stateful 封裝建立邏輯,@Remove 方法觸發 persist
- Client 透過 JNDI 查找 Teacher 介面操作
最佳實踐提醒
- 明確指定
@Column(name="...") 避免命名風格不一致導致 Schema 不符。
- 大欄位(LOB)設定
@Lob + @Column(columnDefinition="BLOB")。
- 唯一業務鍵加
@Column(unique=true) 配合資料庫約束雙重保障。
- 唯讀欄位設定
insertable=false, updatable=false。