[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 メーリングリストの案内