0

専用のDAOクラスでページ外のデータベーストランザクションを実行しようとしています。

この回答は少し役に立ちましたが、公式Webサイトの指示に従った後でも、トランザクションはまだコミットされていません。エラーが発生していません-挿入クエリが実行されていることはわかりますが、データベースにエントリが表示されません。

DAOクラスとインターフェイスは、@Match()それらを見つけるために特定のパッケージに含まれている必要がありますか?それが私が思いついた問題を引き起こしている可能性がある唯一のことです...

これがすべての(私が望む)関連するコードです:

AppModule

public static void bind(ServiceBinder binder) {
    binder.bind(MemberDAOInterface.class, MemberDAO.class);
}

@Match("*DAO*")
public static void adviseTransactions(HibernateTransactionAdvisor advisor,
        MethodAdviceReceiver receiver) {
    advisor.addTransactionCommitAdvice(receiver);
}

MemberDAOInterface

public interface MemberDAOInterface {
    @CommitAfter
    public void addMember(MemberEntity memberEntity);

    @CommitAfter
    public void updateMember(MemberEntity memberEntity);

    @CommitAfter
    public void deleteMember(MemberEntity memberEntity);
}

MemberDAO

public class MemberDAO implements MemberDAOInterface {
    @Inject
    private Session session;

    public void addMember(MemberEntity memberEntity) {
        this.session.persist(memberEntity);
    }

    public void updateMember(MemberEntity memberEntity) {
        this.session.update(memberEntity);
    }

    public void deleteMember(MemberEntity memberEntity) {
        this.session.delete(memberEntity);
    }
}
4

1 に答える 1

0

あなたのこの質問に答える:

@Match() がそれらを見つけるために、DAO クラスとインターフェイスは特定のパッケージに含まれている必要がありますか?

あなたがこれに言及した質問で私は見つけました:

@CommitAfter アノテーションは、デフォルトではページ/コンポーネント クラスでのみ機能します。サービス オブジェクトで同じ動作を得るには、追加のコードが必要です。

そうです、あなたのDAOはタペストリーサービスでなければなりません。それらをサービス パッケージに配置する必要はありません。

それが役立つことを願っています。

于 2013-02-25T13:07:06.177 に答える