首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

EJB 3.0 依賴值物件:@DependentObject 與 @Dependent 註解實戰

     編輯:Java 相關知識

概念釐清

依賴值物件非獨立實體,無主鍵,生命週期綁定擁有者實體,儲存於同一資料表不同欄位。不支援集合、不支援繼承(EJB 3.1 討論中)。

註解體系

註解用途關鍵屬性
@DependentObject標註值物件類別access(PROPERTY/FIELD)
@Dependent標註實體上的 gettervalue = @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 欄位,姓名拆為兩欄儲存。

JPQL 查詢值物件屬性


// 查詢 first name = '晁' 的學生
SELECT s FROM Student s WHERE s.name.first = :fn
// 注意:路徑表達式直接穿透值物件

Session Bean 與 Client

  • StudentDAOBean @Stateless 提供建立/查詢方法
  • Client 驗證建立與依 first/last name 查詢

限制提醒

  • 值物件不可被多實體共享(無主鍵無法關聯)
  • 不可用於集合屬性
  • 序列化必須實作 Serializable
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved