Tapestry @CommitAfter关于方法外页

时间:2013-02-24 12:43:12

标签: hibernate tapestry

我正在尝试在专用的DAO类中执行页面外的数据库事务。

This回答了一点帮助,但是按照official website上的说明后,交易仍未提交。我没有收到任何错误 - 我可以看到正在运行插入查询,但数据库中没有任何条目。

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);
    }
}

1 个答案:

答案 0 :(得分:0)

回答你的这个问题:

  

DAO类和接口是否必须在@Match()的特定包中才能找到它们?

我在你提到的问题中找到了这个:

  

默认情况下,@ CommitAfter注释仅适用于页面/组件类。要在服务对象中获得相同的行为,您需要额外的代码片段。

所以,你的DAO必须是挂毯服务。你需要把它们没有服务包。

希望有所帮助。