[Seasar-user:20551] Re: 複数の永続ユニット使用について
oh
[E-MAIL ADDRESS DELETED]
2011年 2月 6日 (日) 18:46:17 JST
長谷川です。
On Sun, 06 Feb 2011 18:00:00 +0900
Koichi Kobayashi <[E-MAIL ADDRESS DELETED]> wrote:
>
> log1.txt では
>
> ・update 後,Hibernate による select は行われていない.
> ・トランザクションはロールバックされている.
>
> ので,Hibernate によって自動的に update が
> 発行される条件は揃っていないように見えます.
> アプリ側で flush() しているのではありませんか?
>
これは、log1 側で update が発行されるのがそもそもおかしいということでしょうか。
ソース上では、明示的な flush は行っておりません。
> log1.txt では update の後に
>
> > 2011/02/06 16:13:24 DEBUG [org.seasar.extension.jdbc.impl.BasicHandler] - SELECT * FROM I1002M ORDER BY pt_cd, alt_cd
>
> が出ていますが,自分で直接 SQL を発行する前に,
> 明示的に flush() しているのでは?
これは、おそらくテストケース側で検証に使用している DataAccessor#readDb
が発行しているのだと思います。
> そのコンポーネントが 複数の EntityManager に
> 対応しておらず,DI される EntityManager は dicon の
> インクルード順に依存している (プロパティ名と
> EntityManager の名前が一致していない) ということは
> ないでしょうか?
>
再度確認はしてみたのですが、違いは見つかりませんでした。
ソース自体は非常に単純なものでして、例えば ejb-entity 側の EJB は
@PersistenceContext(unitName = "sc01")
EntityManager em;
@Override
public I1002m get(String ptCd, String altCd) {
return em.find(I1002m.class, new I1002mId(ptCd, altCd));
}
...
となっています。persistence.xml と名称は一致しています。
ejb-core 側で、この EJB を単純につかってデータ更新を行うサンプルでテスト
を行っていますが、そのソースも
@Override
public void doit() {
I1002m value = dao.get("A", "B");
value.setOpKbn("X");
}
といったごく単純なものです。jpa のインクルード順に依存するようなコードに
なっているでしょうか。
あるいは、モジュールが分かれているということがなんらかの問題になっている
のでしょうか。
一応、実行したテストケースも以下に
private TestContext ctx;
private DataAccessor da;
private Sc1Service service;
public void doit() {
DataSet expected = ctx.getExpected();
service.doit();
assertEquals(expected, da.readDb(expected));
}
以上、よろしくお願いいたします。
--
_/_/
_/_/ mailto: [E-MAIL ADDRESS DELETED]
_/_/
Seasar-user メーリングリストの案内