从 public static void main 测试 Hibernate + Spring

Posted

技术标签:

【中文标题】从 public static void main 测试 Hibernate + Spring【英文标题】:Test Hibernate + Spring from public static void main 【发布时间】: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

谢谢

【问题讨论】:

【参考方案1】:

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

这将启动事务上下文。

import org.springframework.transaction.annotation.Transactional;

@Transactional
public User getUser(int id) 
..

【讨论】:

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

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

【讨论】:

以上是关于从 public static void main 测试 Hibernate + Spring的主要内容,如果未能解决你的问题,请参考以下文章

如何从终端运行Java public static void main [复制]

public static void main(String arg[]) 详细解释(转)

public static void main(String[] args) 和 public static void main(String args[]) 的区别? [复制]

在哪些情况下我们可以使用 public static void main(String... args) 而不是 public static void main(String[] args)

为什么 main 方法是 public static void ?

为什么main方法是public static void?