[Seasar-user:5200] [S2DAO] SELECT文のversionNoについて

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2006年 11月 19日 (日) 23:13:26 JST


関です。

S2Dao にて質問があります。

versionNo を使って排他制御を使ったDBとのアクセスを試してみたのですが、
SELECT文を実行する時にversionNoがWHEREの条件に入ってきて、どうも使いにくいと感じています。何か使い方が間違っているのであればご助言頂きたいと思います。

後述の、DTO,DAOの定義があるとして、私的にはSELECTする時は

  DataTableDto dto = new DataTableDto();
  dto.setCode(100);
  dto =	dataTableDtoDao.select(dto); ←(1) 主キーでデータをとってきて
  dto.setName("TmpName"); ← DTOを編集して
  dataTableDtoDao.update(dto); ←アップデートする

としたいのですが
(1)のSQLが [SELECT 〜省略〜 WHERE code = 100 and version_no = 0]
となるために、自作のSQLをわざわざ作って
  dto =	dataTableDtoDao.selectByPk(dto.getCode()); ←(1)
としています

CODE(主キー)が100のデータを取得したいのにそのレコードのバージョンが
分かっていないとだめと言う事なのでしょうか?

SELECTする時は versionNo を見ないで頂くと良いかなと思ったりするのですが
そのそも、この使い方が間違っているとかご助言をいただけるとありがたいです。

よろしくお願いいたします。

====================
=DBの定義
data_table
 code int  <- 主キー(PK)
 name varchar
 version_no int
====================
=DTOの定義
DataTableDto
 private int code;
 private String name;
 private int versionNo;
 〜getset省略〜
====================
=DAOの定義
public interface dataTableDtoDao{
  public Class BEAN = DataTableDto.class;
  public int	insert(DataTableDto dto);
  public int	update(DataTableDto dto);
  public int	delete(DataTableDto dto);
  public DataTableDto	select(DataTableDto dto);
  public DataTableDto	selectByPk(int code);
  public String selectByPk_SQL = "SELECT * FROM data_table WHERE code = /*code*/0";
}





Seasar-user メーリングリストの案内