2011年9月14日 星期三

[JPA] @NamedQueries and NamedQuery

可以在 EntityA 中利用 @NamedQuery 定義簡單的 query 語句
@NamedQueries({
     @NamedQuery(name = "EntityA.test", query = "from TABLE o where o.FIELD = :variable")
     // ....可多個 @NamedQuery
})
public class EntityA extends DomainEntity {
    // query 語句中需要代入的變數,用冒號做前置符號
    public static final String ATTRIBUTE_VARIABLE = "variable";
    // NamedQuery 的名稱
    public static final String NAMED_QUERY_TEST = "Entity.test";

}

然後便可在 service 中使用此 NamedQuery
// find: 取回的結果有多筆時使用
public List findEntityA (String variable)  {
    return find(EntityA.NAMED_QUERY_TEST, EntityA.ATTRIBUTE_VARIABLE, "vaiableValue");
}

// getSingleResult: 只會取回一筆結果時
public EntityA findEntityA (String variable)  {
    return getSingleResult(EntityA.NAMED_QUERY_TEST, EntityA.ATTRIBUTE_VARIABLE, "vaiableValue");
}

若 SQL 中有多個變數時,可用 Map,ex:
Map parameters = new HashMap();
parameters.put(ATTRIBUTE1, VALUE1);
parameters.put(ATTRIBUTE2, VALUE2);
find(EntityA.NAMED_QUERY_TEST, parameters);


* Reference
- find

沒有留言:

張貼留言