Entityの@Idプロパティだけ抜き出せないのかなぁ?

S2JDBCのupdateは更新対象のレコードがない場合、SOptimisticLockExceptionが返ってきます。
これでもいいんでしょうが、できれば「対象がありません。」みたいな感じがうれしいので、updateの前に更新対象のEntityが存在するかしないか調べたいとお思います。isExist()みたいな感じ。

で、Entityに詰められてる@Idプロパティを取得してその内容を元に自動で検索したいです。
ということで、Entityの@Idアノテーションを個別に探してそのプロパティの名前と値をそのまま入れてやればできます。こんな感じで。


Map map = new HashMap();
Field[] fields = entity.getDeclaredFields();
for (Field field : fields) {
Id id = field.getAnnotation(Id.class);
if (null != id) {
map.put(field.getName(), field.get(entity));
}
}
findByCondition(map);

でもそんなメソッド用意されてそう何だけどな・・・。探してみよ。

でもSOptimisticLockExceptionでもいい気がしてきた。


2008/7/19 追記

EntityMeta#getIdPropertyMetaList()
で取得出来るみたい。