たかみんさん
アイポコミッターの別府です。
サブクエリなどの複雑な SQL を利用する場合は、以下のようなコードでマッピングを維持したままデータを取得することが可能です。
Database ユーティリティは Cayenne の薄いラッパーになっています。
String sql =
"select * from turbine_user where last_name = (select last_name
from eip_m_addressbook where last_name = #bind($last_name))";
List<TurbineUser> result =
Database
.sql(TurbineUser.class, sql)
.param("last_name", "テスト")
.fetchList();
ただし、集計クエリなどは count() や max() などと同時に利用することが多いと思いますので、
この場合はマッピングされない count() や max() を取得するためにマップで取得する必要があります。
String sql =
"select disabled, count(*) from turbine_user group by disabled";
List<DataRow> result =
Database.sql(TurbineUser.class, sql).fetchListAsDataRow();
なお、Cayenne 3 での集計クエリやサブクエリ対応については試したことがないため、ここでは申し上げられませんが、
3 にアップブレードして、アイポで動作させる場合は一点注意点があります。
cayenne.jar の中には、実は cayenne 以外の apache プロジェクト(commons とか velocity とか)のラ
イブラリが同梱されておりまして、
3 にあげた場合に、それらのバージョンもあがってしまいます。
このとき、アイポ本体との依存関係につきまして競合が発生する可能性がありますので、これらを別途解決する必要がありそうです。
以上、ご参考になればと思います。