cayenneでSQLを作る際によく出る2つのパターン
Expression exp = ExpressionFactory.matchExp(EipTTodoCategory.USER_ID_PROPERTY, userId); Expression exp2 = ExpressionFactory.matchDbExp(EipTTodoCategory.CATEGORY_ID_PK_COLUMN, categoryId);
このそれぞれのメッソドの中身では
public static Expression matchExp(String pathSpec, Object value) { return new ASTEqual(new ASTObjPath(pathSpec), value); } public static Expression matchDbExp(String pathSpec, Object value) { return new ASTEqual(new ASTDbPath(pathSpec), value); }
のようになっていました。微妙に読み出し方が違うらしい。
ここでEipTTodoCategoryを見てみると、
public class _EipTTodoCategory extends org.apache.cayenne.CayenneDataObject { public static final String CATEGORY_NAME_PROPERTY = "categoryName"; public static final String CREATE_DATE_PROPERTY = "createDate"; public static final String NOTE_PROPERTY = "note"; public static final String UPDATE_DATE_PROPERTY = "updateDate"; public static final String UPDATE_USER_ID_PROPERTY = "updateUserId"; public static final String USER_ID_PROPERTY = "userId"; public static final String EIP_TTODO_ARRAY_PROPERTY = "eipTTodoArray"; public static final String TURBINE_USER_PROPERTY = "turbineUser"; public static final String CATEGORY_ID_PK_COLUMN = "CATEGORY_ID";
のようになっています。
matchExpが使えるケース
***_PROPERTY になっているカラムで検索する場合、つまりプライマリキー以外で検索をする場合に使います。
matchDbExpを使う必要が有るケース
***_PK_COLUMN になっているカラムで検索する場合、つまり
プライマリキーで検索をかける場合
になります。