[Seasar-user:9900] Re: [DbFlute]entity にidentityの値が設定されない

Yu Tagaya [E-MAIL ADDRESS DELETED]
2007年 8月 14日 (火) 20:28:56 JST


久保さん
多加谷です。

RkBsBaseのsetBaseIdではnullが設定されています。
select @@identityを呼ぶDaoメソッドを定義して実行すると
正しい値が取れました。transactionなしで検証しています。

原因がわかりますでしょうか?

以下ログです。

[3292] Intercepted the method 'RkBsBaseBhv.delegateInsert()': 
entity=map:@{BaseId@=@}
[3292]   before setup : 
map:@{RegDttm@=@;ModDttm@=@;RegUserId@=@;ModUserId@=@}
[3292]     RegDttm has been set up: value=2007-08-14 20:25:43.096
[3292]     ModDttm has been set up: value=2007-08-14 20:25:43.096
[3292]     RegUserId has been set up: value=1
[3292]     ModUserId has been set up: value=1
[3292]   after setup  : map:@{RegDttm@=2007-08-14 
20:25:43.096@;ModDttm@=2007-08-14 20:25:43.096@;RegUserId@=1@;ModUserId@=1@}
[3292] 
/=========================================================================
[3292] 
RkBsBaseDao.insert()
[3292] 
===================/
[3292] SqlCommand Initialization Cost: [00m00s000ms]
[3292] 論理的なコネクションを取得しました
[3292] INSERT INTO Base (BaseNm, OpenDttm, CloseDttm, ReceptionStartTm, 
ReceptionEndTm, ReservationEnableDays, SortOrdr, RegUserId, RegDttm, 
ModUserId, ModDttm) VALUES ('2007-08-14 20:25:43.08', '2007-08-14 20.25.43', 
'2007-08-14 20.25.43', '090000', '180000', 30, 10000, 1, '2007-08-14 
20.25.43', 1, '2007-08-14 20.25.43')
[3292] select @@identity
[3292] 論理的なコネクションを取得しました
[3292] 論理的なコネクションを閉じました
[3292] {Invoked} baseId = null
[3292] 論理的なコネクションを閉じました
[3292] ===========/ [00m00s000ms - Result: 1]
[3292]
[3292] entity.baseId after insert null
[3292] entity.regUserId after insert 1
[3292] entity.regDttm after insert 2007-08-14 20:25:43.096
[3292] entity.modUserId after insert 1
[3292] entity.modDttm after insert 2007-08-14 20:25:43.096
[3292] Intercepted the method 'RkBsBaseBhv.delegateInsert()': 
entity=map:@{BaseId@=@}
[3292]   before setup : map:@{RegDttm@=2007-08-14 
20:25:43.096@;ModDttm@=2007-08-14 20:25:43.096@;RegUserId@=1@;ModUserId@=1@}
[3292]     RegDttm has been set up: value=2007-08-14 20:25:43.111
[3292]     ModDttm has been set up: value=2007-08-14 20:25:43.111
[3292]     RegUserId has been set up: value=1
[3292]     ModUserId has been set up: value=1
[3292]   after setup  : map:@{RegDttm@=2007-08-14 
20:25:43.111@;ModDttm@=2007-08-14 20:25:43.111@;RegUserId@=1@;ModUserId@=1@}
[3292] 
/=========================================================================
[3292] 
RkBsBaseDao.insert()
[3292] 
===================/
[3292] SqlCommand Initialization Cost: [00m00s000ms]
[3292] 論理的なコネクションを取得しました
[3292] INSERT INTO Base (BaseNm, OpenDttm, CloseDttm, ReceptionStartTm, 
ReceptionEndTm, ReservationEnableDays, SortOrdr, RegUserId, RegDttm, 
ModUserId, ModDttm) VALUES ('22007-08-14 20:25:43.111', '2007-08-14 
20.25.43', '2007-08-14 20.25.43', '090000', '180000', 30, 10000, 1, 
'2007-08-14 20.25.43', 1, '2007-08-14 20.25.43')
[3292] select @@identity
[3292] 論理的なコネクションを取得しました
[3292] 論理的なコネクションを閉じました
[3292] {Invoked} baseId = null
[3292] 論理的なコネクションを閉じました
[3292] ===========/ [00m00s000ms - Result: 1]
[3292]
[3292] entity.baseId after update null
[3292] entity.regUserId after update 1
[3292] entity.regDttm after update 2007-08-14 20:25:43.111
[3292] entity.modUserId after update 1
[3292] entity.modDttm after update 2007-08-14 20:25:43.111
[3292] 
/============================================================================
[3292] 
RkBaseDao.getIdentity()
[3292] 
======================/
[3292] SqlCommand Initialization Cost: [00m00s000ms]
[3292] SELECT @@identity
[3292] 論理的なコネクションを取得しました
[3292] 論理的なコネクションを閉じました
[3292] ===========/ [00m00s000ms - Result: 62]
[3292]
[3292] identity 62


> 久保です。
>
>> > 多加谷@アークシステムです。
>> >
>> >  <property name="allowLocalTx">false</property>にすると、
>> >
>> > Throwable:org.seasar.framework.exception.SIllegalStateException:
>> > [ESSR0311]トランザクションが開始されていません
>> >
>> > というエラーが出ます。設定がおかしいのでしょうか?
>>
>> おかしいみたいですね。
>> j2ee-rk.diconの中身がわかりませんが、
>> たぶん、TransactionManagerImplが複数存在していると
>> 思われます。
>
> 自分も全く同じ問題を抱えたことがあります。
>
> <component name="transactionManager"
>  class="org.seasar.extension.jta.TransactionManagerImpl"/>
>
> そのときは、2箇所に存在してしまっていました。
> 片方を削除して、全てのDAOが一つのtransactionManagerを
> 参照することによって、トランザクションが聞くようになりました。
>
> 見させて頂いた[j2ee.dicon]に定義されていますので、
> 全てのDBにおいて、同じ[j2ee.dicon]をincludeしないといけないと思います。
>
>
>
> それとは別に、本当にトランザクションが発行されていないために
> 現象が発生しているのかどうかの切り分けを先にやられておいた方が
> 良いかと思います。
> 簡単なプログラムでトランザクション無しで「select @@identity」やると
> どうなるか試してみてください。
>
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
> 




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