2008年10月3日金曜日

Cayenneで全エンティティオブジェクトに共通のメソッドを持たせる

以下のようにして全エンティティ共通のメソッドを追加する。
getObjEntity().getName()でオブジェクト名(テーブル名)を渡しているところがポイント。

public class CustomCayenneDataObject extends CayenneDataObject {

/*
* 主キーで検索するメソッド
*/
public Object selectById(Object id) {

ObjectIdQuery query = new ObjectIdQuery(new ObjectId(getObjEntity().getName(), ID_PK_COLUMN, id));
return DataObjectUtils.objectForQuery(getObjectContext(), query);

}

/*
* 複数の主キーを指定して検索するメソッド
*/
public List selectByIdList(List idList) {

checkObjectContext();

if (CollectionUtils.isEmpty(idList))
return null;

Expression expression = null;
expression = ExpressionFactory.inDbExp(ID_PK_COLUMN, idList);
// expression = ExpressionFactory.inExp(ID_PK_COLUMN, idList); // これだとだめ。変だろ!
SelectQuery query = new SelectQuery(getObjEntity().getName(), expression);
List objectList = getObjectContext().performQuery(query);
if (CollectionUtils.isEmpty(objectList))
return null;

return objectList;

}


}

0 件のコメント:

コメントを投稿