java - Hibernate 忽略了我的持续调用?

标签 java mysql hibernate tapestry

我有一个奇怪的问题。无论我做什么,我都无法通过 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/

相关文章:

java - jsp中有关使用准备好的语句进行mysql更新的异常

2张表的Mysql优化查询

hibernate - 如何在条件中使用 'in' 来查询子对象?

java - 如何强制编辑文本框通过缩进格式化任何替换文本?

java - 替换字符串中正则表达式匹配的空白区域

java - Java应用服务器线程池配置

MySQL - 如果 ID 和时间戳在时间范围内唯一的组合约束,则防止插入记录

mysql - 无法实例化 SLF4J LoggerFactory

java - JPA Query with HQL and pageable create subselect with * return 并生成别名错误

java - 无法使用 Apache Ivy 获取 Hibernate Core 和 Hibernate Annotations(但它也与 Maven2 相关。)