次のコード スニペットを参照してください。
@Transactional
public void saveMembersService(List<Member> list1, List<Member> list2)
{
saveMembersDAO(list1); // does not perform commit. Why?
saveMembersDAO(list2); // does not perform commit. Why?
} // does perform commit only here!
@PersistenceContext
private EntityManager em;
@Transactional
public void saveMembersDAO(List<Member> members)
throws HibernateException
{
Iterator<Member> it = members.iterator();
while (it.hasNext())
{
Member wsBean = it.next();
em.persist(wsBean); // overall commit will be made after method exit
}
}
MySQLをDBとして使用しています。上記のメソッドの実行後、MySql ログを監視します。しかし、 saveMembersServiceメソッドの実行後に単一のコミットしか表示されません。トランザクション メソッドの呼び出しごとに2 つのコミットが見られると予想しています。どこが間違っていますか?
更新 1:申し訳ありませんが、サービス メソッドに @Transactional を追加するのを忘れていました。今直った
更新 2: DAO のPropagation.REQUIRES_NEW属性で確認しました- 結果は同じです (@Transactional at service メソッドの有無にかかわらず)