ももらぼっ!にっき


2006年04月07日 [長年日記]

_ [Java][Seasar] S2Daoで検索処理を書く。

S2Daoで検索処理を書くときは、QUERYアノテーションかSQLアノテーションを指定しよう。

public interface HogeDao {
  public Class BEAN = Hoge.class;

  public static final String getHoge_ARGS = "id";
  public Hoge getHoge(String id);
}

として、

Hoge hoge = hogeDao.getHoge("1");

としても、「select * from hoge where id = '1'」相当のSQLを発行してくれるようだが、

Hoge hoge = hogeDao.getHoge(null);

とすると、「select * fro hoge」相当のSQLが発行されてしまう。 これだと、全件取得になった上で最初の一件を返すため、引数にnullが指定されてしまったことに気付き辛く、バグの発生する原因となってしまう。

これを回避するには、きちんとQUERYアノテーションやSQLアノテーションを指定することだ。

public interface HogeDao {
  public Class BEAN = Hoge.class;

  public static final String getHoge_QUERY = "id = ?";
  public static final String getHoge_ARGS = "id"; //引数1つだから、これなくてもいいね。
  public Hoge getHoge(String id);
}

これで、

Hoge hoge = hogeDao.getHoge(null);

としても、「select * from Hoge where id = null」なSQLを発行するようになる。 これなら検索結果がゼロ件になるのでhogeがnullとなってくれる。

_ [ももそふと] trankって…orz。

こないだ公開したSubversionのリポジトリ。全て、trankってなってたことに今更ながら気付いた。

trunkが正解だってば。

そのうち直しておこう。