依賴值物件非獨立實體,無主鍵,生命週期綁定擁有者實體,儲存於同一資料表不同欄位。不支援集合、不支援繼承(EJB 3.1 討論中)。
| 註解 | 用途 | 關鍵屬性 |
|---|---|---|
| @DependentObject | 標註值物件類別 | access(PROPERTY/FIELD) |
| @Dependent | 標註實體上的 getter | value = @DependentAttribute[] |
| @DependentAttribute | 映射值物件屬性至欄位 | name, column[] |
@DependentObject(access = AccessType.PROPERTY)
public class Name implements Serializable {
private String first, last;
// getter/setter
}
@Entity @Table(name="STUDENT")
public class Student implements Serializable {
@Id @GeneratedValue private int id;
private Name name;
@Dependent({
@DependentAttribute(name="first", column=@Column(name="FIRST")),
@DependentAttribute(name="last", column=@Column(name="LAST"))
})
public Name getName() { return name; }
// ...
}
STUDENT 表包含 ID, FIRST, LAST, GRADE, EMAIL 欄位,姓名拆為兩欄儲存。
// 查詢 first name = '晁' 的學生
SELECT s FROM Student s WHERE s.name.first = :fn
// 注意:路徑表達式直接穿透值物件
StudentDAOBean @Stateless 提供建立/查詢方法Serializable