matchExpとmatchDbExpの使い分け

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 になっているカラムで検索する場合、つまり

プライマリキーで検索をかける場合

になります。