Hibernate Tapestry@CommitAfter位于页面外的方法上
我试图在专用DAO类中执行页面之外的数据库事务 答案有一点帮助,但是在遵循关于事务的说明之后,仍然没有提交事务。我没有收到任何错误-我可以看到正在运行insert查询,但数据库中没有显示任何条目 DAO类和接口是否必须在特定的包中才能被Hibernate Tapestry@CommitAfter位于页面外的方法上,hibernate,tapestry,Hibernate,Tapestry,我试图在专用DAO类中执行页面之外的数据库事务 答案有一点帮助,但是在遵循关于事务的说明之后,仍然没有提交事务。我没有收到任何错误-我可以看到正在运行insert查询,但数据库中没有显示任何条目 DAO类和接口是否必须在特定的包中才能被@Match()找到?这是唯一能引起我所想到的问题的东西 以下是所有(我希望)相关代码: 应用模块 public static void bind(ServiceBinder binder) { binder.bind(MemberDAOInterface
@Match()
找到?这是唯一能引起我所想到的问题的东西
以下是所有(我希望)相关代码:
应用模块
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);
}
MemberDao接口
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);
}
}
关于你的这个问题: DAO类和接口是否必须在特定的包中,@Match()才能找到它们 我在你提到的问题中发现: 默认情况下,@CommitAfter注释仅适用于页面/组件类。要在服务对象中获得相同的行为,您需要额外的一段代码 所以是的,您的DAO必须是tapestry服务。你需要把他们放在服务包中
希望这能有所帮助。我没有看到任何明显的问题-我会先尝试在HibernateTransactionAdvisor周围放置一些日志记录/断点,看看是否有人调用它。对不起,我的错。。。很明显,您已经将dao作为服务进行了绑定。请放弃我的回答。