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