[Seasar-user:4761] Re: [S2Dao] IDの取得ができない
出羽 健一
[E-MAIL ADDRESS DELETED]
2006年 10月 11日 (水) 11:54:13 JST
出羽です。
IDの自動生成は、トランザクションが掛かっていないと
正しく機能しないです。
(私も一度ハマリました。)
トランザクションの自動制御については、
下記のURLに記載があるので、参考にどうぞ。
http://s2container.seasar.org/ja/tx.html
________________________________________
From: [E-MAIL ADDRESS DELETED] [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of 小林正和
Sent: Wednesday, October 11, 2006 11:47 AM
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:4760][S2Dao] IDの取得ができない
お世話になっています。masapon1967といいます。
自動生成するようにしたフィールドをもつオブジェクトをS2Daoを使用して挿入した直後に
そのオブジェクトのフィールドを確認すると0が代入されています。
データベースには正しくレコードが挿入されていました。
これは仕様でしょうか。もしそうではない場合は、どのようにして自動生成した値を
代入するのでしょうか。
過去のログで、#3439のG様が作成した検証用プログラムでは挿入直後に挿入した
オブジェクトのIDに自動生成した値が代入されているようです。
環境
Seasar2 2.3.12
S2Dao 1.0.35
MySQL 5.0.24a
MySQL Connector/J 5.0.3
//テーブル定義
CREATE TABLE dry
{
id NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NOT NULL,
PRIMARY KEY(id)
};
//エンティティ
@Bean(table = "dry")
public class Dry implements Serializable{
Integer id;
String name;
@Id(IdType.IDENTITY)
public Integer getId(){
return id;
}
public void setId(Integer id){
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
//DAO
@S2Dao(bean=Dry.class)
public interface DryDao{
void insert(Dry dry);
}
//クライアント
public class DryMain{
private static final String PATH = "app.dicon";
public static void main(String[] args){
S2Container container = S2ContainerFactory.create(PATH);
Dry dry = new Dry("Super");
DryDao dao = (DryDao)container.getComponent(DryDao.class);
dao.insert(dry);
System.out.println(dry.getId());//自動生成した値が入っていてほしい。
}
}
//app.dicon
<?xml version=" 1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
"http://www.seasar.org/dtd/components23.dtd ">
<components>
<include path="j2ee.dicon"/>
<include path="dao.dicon"/>
<component class="samples.DryDao">
<aspect> dao.interceptor</aspect>
</component>
</components>
標準出力
DEBUG 2006-10-11 11:23:17,436 [main] 物理的なコネクションを取得しました
DEBUG 2006-10-11 11:23:17,436 [main] 論理的なコネクションを取得しました
DEBUG 2006-10-11 11:23:17,757 [main] 論理的なコネクションを閉じました
DEBUG 2006-10-11 11:23:17,807 [main] 論理的なコネクションを取得しました
DEBUG 2006-10-11 11:23:17,817 [main] INSERT INTO dry (name) VALUES ('Super')
DEBUG 2006-10-11 11:23:17,947 [main] SELECT LAST_INSERT_ID()
DEBUG 2006-10-11 11:23:18,167 [main] 物理的なコネクションを取得しました
DEBUG 2006-10-11 11:23:18,167 [main] 論理的なコネクションを取得しました
DEBUG 2006-10-11 11:23:18,187 [main] 論理的なコネクションを閉じました
DEBUG 2006-10-11 11:23:18,187 [main] 論理的なコネクションを閉じました
0
--
----------------------------------------------
Masakazu Kobayashi ([E-MAIL ADDRESS DELETED])
Seasar-user メーリングリストの案内