我有一个奇怪的问题。无论我做什么,我都无法通过 hibernate 将新记录放入数据库中。我将 Hibernate 与 Tapestry 和 MySQL 一起使用。请有人帮助我!
我有带有这段代码的 UserDAO 类:
@CommitAfter
public boolean saveUser(User user){
try {
session.persist(user);
return true;
}catch(Exception e){
return false;
}
}
然后我在这里调用它:
@OnEvent(component="add")
Object onAdd(){
if(username!=null && password!=null){
User user = new UserBean();
user.setUsername(username);
user.setPassword(password);
userService.saveUser(user);
}
if(eventName!=null){
Event event = new EventBean();
event.setName(eventName);
eventService.saveEvent(event);
}
return this;
}
但它不起作用,我不知道为什么,请帮助!
这是完整的项目:http://www.mediafire.com/?pqb2aaadhbukuav
我在 AppModule.java 中添加了这段代码,现在可以运行了
@Match("*DAO")
public static void adviseTransactions(HibernateTransactionAdvisor advisor, MethodAdviceReceiver receiver) {
advisor.addTransactionCommitAdvice(receiver);
}
任何人都可以向我解释这段代码的作用吗? 这不是我第一次使用 hibernate 和 Tapestry ,而且我以前从未见过,所以我不明白?请任何人
最佳答案
默认情况下,@CommitAfter
注解仅在页面/组件类中有效。要在服务对象中获得相同的行为,您需要那段额外的代码。 this page from the user guide 的下半部分涵盖了这一点.
Can anyone explain to me what is this code doing
该代码在名称与 @Match("*DAO")
匹配的任何服务中查找 @CommitAfter
注释。然后应用 HibernateTransactionAdvisor
,如果带注释的方法成功退出,它会添加一个 commit()
调用。这是使用 Tapestry 的一些类似 AOP 来完成的 meta-programming特点。
关于java - Hibernate 忽略了我的持续调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7536659/