【问题标题】:Test Hibernate + Spring from public static void main从 public static void main 测试 Hibernate + Spring
【发布时间】:2011-08-03 21:50:17
【问题描述】:

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

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

}

但我得到了错误

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

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

my config User.java UserHibernateDao.java Full Project

谢谢

【问题讨论】:

    标签: java hibernate spring


    【解决方案1】:

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

    这将启动事务上下文。

    import org.springframework.transaction.annotation.Transactional;
    
    @Transactional
    public User getUser(int id) {
    ..
    }
    

    【讨论】:

    • 我认为@craftsman 的意思是,为了测试您的代码,您不必修改要测试的代码。相反,您将使用 JUnit 之类的东西来驱动您的真实对象,以便以与在真实环境中测试相同的方式对其进行测试。如果是这样,那么该评论应该针对原始问题,而不是您的答案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-22
      • 2019-05-28
      • 2011-02-23
      • 1970-01-01
      • 2021-02-17
      • 2015-05-30
      • 1970-01-01
      相关资源
      最近更新 更多