[Seasar-user:21054] Re: [tutorial][S2JDBC]挿入をコミットしたいのですが
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2011年 10月 7日 (金) 17:01:39 JST
小林 (koichik) です.
s2jdbc-tutorial では HSQLDB の初期データが src/test/resources/data/
以下に用意されていて、S2Container の初期化時に毎回それを読み込んで
いるので、次に実行したときは前にインサートしたデータが存在しない
だけだと思います。
HSQLDB の終了時にデータを保存するように設定を変更するか、
別プロセスとして実行 (他の DBMS でも構いません) すれば、
インサートしたデータも見えると思います。
Date: Fri, 7 Oct 2011 16:47:47 +0900
From: 鈴木正則 <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:21053] [tutorial][S2JDBC]挿入をコミットしたいのですが
> お世話になります。鈴木です。
>
> Seasar2入門の本を見ながら
> s2jdbc-tutorial のエンティティ挿入のサンプルについて、実行しています。
> InsertMain.javaを実行すると、最後にロールバックされます。
>
> この挿入をコミットしようと、rollback ⇒ commit に変更しました。下記★。
>
> コンソールには、下記のように、コミットしましたのメッセージが出るのですが
> 2回、3回と繰返し実行しても、idは15のままです。
> 15、16、17と増えていく期待をしたのですが。
>
> また、GetResultListMain.javaで、一覧を見ると、追加したはずの"test"はありません。
>
> 初歩的な質問ですが、コミットについて勘違いをしているでしょうか?
>
> 【コンソール】
> DEBUG 2011-10-07 16:12:09,703 [main] トランザクションを開始しました。tx=[FormatId=4360, GlobalId=1317971529703/0, BranchId=]
> DEBUG 2011-10-07 16:12:10,125 [main] 物理的なコネクションを取得しました
> DEBUG 2011-10-07 16:12:10,125 [main] 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1317971529703/0, BranchId=]
> DEBUG 2011-10-07 16:12:10,125 [main] insert into EMPLOYEE (ID, NAME, SALARY, DEPARTMENT_ID, ADDRESS_ID, VERSION) values (null, 'test', null, null, null, 1)
> DEBUG 2011-10-07 16:12:10,156 [main] call identity()
> 15
> DEBUG 2011-10-07 16:12:10,171 [main] トランザクションをコミットしました。tx=[FormatId=4360, GlobalId=1317971529703/0, BranchId=]
> DEBUG 2011-10-07 16:12:10,171 [main] 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1317971529703/0, BranchId=]
> DEBUG 2011-10-07 16:12:10,171 [main] 物理的なコネクションを閉じました
>
>
> 【修正したソース】
> package tutorial.main;
>
> import javax.transaction.UserTransaction;
>
> import org.seasar.extension.jdbc.JdbcManager;
> import org.seasar.framework.container.SingletonS2Container;
> import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
>
> import tutorial.entity.Employee;
>
> public class InsertMain {
>
> public static void main(String[] args) throws Exception {
> SingletonS2ContainerFactory.init();
> try {
> JdbcManager jdbcManager = SingletonS2Container
> .getComponent(JdbcManager.class);
> UserTransaction ut = SingletonS2Container
> .getComponent(UserTransaction.class);
> ut.begin();
> try {
> test(jdbcManager);
> } finally {
> //ut.rollback();
> ut.commit(); //★修正箇所
> }
> } finally {
> SingletonS2ContainerFactory.destroy();
> }
> }
>
> public static void test(JdbcManager jdbcManager) {
> Employee emp = new Employee();
> emp.name = "test";
> jdbcManager.insert(emp).execute();
> System.out.println(emp.id);
> }
> }
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
--
{
name: "Koichi Kobayashi",
mail: "[E-MAIL ADDRESS DELETED]",
blog: "http://d.hatena.ne.jp/koichik/",
twitter: "@koichik"
}
Seasar-user メーリングリストの案内