0

2番目のメソッドに@Transactionalアノテーションを追加する必要がありますか?私はそうは思いませんが、本当にわかりません。

@Transactional
public void addUser(User u) {
    u.setCreationDate(new Date());
    userDAO.addUser(u);
}

// should I add @Transactional annotation here?
public User addUser(String name, String surname) {
    User user = new User();
    user.setName(name);
    user.setSurname(surname);
    this.addUser(user);
    return user;
}

// DAO method
public void addUser(User u) {
    entityManager.persist(u);
}
4

4 に答える 4

2

@Transactionalメソッドにアノテーションを追加する必要があります。そうしないpublic User addUser(String name, String surname)と、メソッドは非トランザクション方式で実行されます。

@Transactionalプロキシメカニズムを使用してトランザクションサポートを実装します。これは、2番目のオブジェクトからメソッドを呼び出す場合にのみ呼び出されます(つまり、同じクラス内のメソッドを呼び出す場合、プロキシシステムを経由しないため、常に呼び出し元のトランザクションを使用して実行されます)。

于 2013-02-12T03:40:05.770 に答える
1

署名はdiffであるため、どちらも異なる方法です。したがって、@Transactionalアノテーションを追加する必要があります。ご存知のように、Springはプロキシオブジェクトに取り組んでいます

于 2013-02-12T13:41:43.817 に答える
0

デフォルト設定を使用している場合は、ラッパーメソッドに注釈を付ける必要はありません @Transactional。のPROPAGATION設定は@Transactional、トランザクションスコープを定義します。デフォルトの伝播設定はPROPAGATION_REQUIREDです。

詳細については、こちらを参照してください。

于 2013-02-12T01:12:02.067 に答える
0

あなたの場合、それは同様の結果を生み出します。違いは、@ Transactionalをオンpublic User addUser(String name, String surname)にすると、トランザクションのコンテキストで新しいユーザーが作成されることです。そうしないと、コードが実行されたときにのみトランザクションが開始されますpublic void addUser(User u)

于 2013-02-12T01:55:56.393 に答える