从 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)