从public static void main测试Hibernate + Spring

时间:2011-04-12 13:33:46

标签: java hibernate spring

我是Spring和Hibernate的新手。 我创建了实体User和DAO - UserHibernateDao。 我想测试hibernate如何在简单的java-class中使用public static void main:

public class Starter {

public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("/org/jtalks/jcommune/model/entity/applicationContext-dao.xml");
    Dao<User> uhd = (Dao) context.getBean("userDao");
    User user = new User();
    user.setNickName("UserName");
    uhd.saveOrUpdate(user);
}

}

但我收到了错误

  

信息:使用Hibernate SessionFactory的DataSource [org.springframework.jdbc.datasource.DriverManagerDataSource@17b4703]进行HibernateTransactionManager   线程“main”中的异常org.springframework.orm.hibernate3.HibernateSystemException:没有Hibernate会话绑定到线程,配置不允许在这里创建非事务性的;嵌套异常是org.hibernate.HibernateException:没有Hibernate会话绑定到线程,并且配置不允许在这里创建非事务性的   在org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:679)

我知道我需要创建类似会话和事务的东西,但我不知道我应该怎么做。

my config User.java UserHibernateDao.java Full Project

由于

2 个答案:

答案 0 :(得分:1)

将@Transactional注释添加到DAO的方法中。

这将启动交易上下文。

import org.springframework.transaction.annotation.Transactional;

@Transactional
public User getUser(int id) {
..
}

答案 1 :(得分:1)

我建议您阅读此reference on Spring and Transaction Management,因为它可以帮助您了解如何设置这一切。