Hibernate:如果没有活动事务,createCriteria无效

时间:2016-02-09 11:31:33

标签: java hibernate ant transactions

我是Hibernate的新手。使用版本3并出现以下问题。

我使用hibernatetool ant任务生成DAO类

当我运行第一次单元测试时,出现以下错误:

  

没有配置CurrentSessionContext! org.hibernate.HibernateException:   没有配置CurrentSessionContext!at   org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:542)

所以我进行了谷歌搜索并将此行添加到我的hibernate.cfg.xml:

<property name="current_session_context_class">thread</property>

之后,我在尝试持久化对象时遇到以下错误:

  

org.hibernate.HibernateException:没有活动事务,createCriteria无效

很好,所以我手动开始并提交了一笔交易。

所以我坚持这样坚持: 代码:

 Transaction tx=null;
 tx = session.beginTransaction();
sessionFactory.getCurrentSession().persist(transientInstance);

成功!

所以,我的问题是:

  1. 所有操作必须明确地成为事务的一部分,那么为什么Hibernate工具代码生成器也没有把它放在我的DAO中呢?是否有可能通过ant任务添加这些行,那么如何?
  2.   

    tx = session.beginTransaction();

    1. 什么是CurrentSessionContext?我提供了值#34;线程&#34;。那是什么意思?还有什么其他选择?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用Spring-Annotations -

  

“@事务”

尽量减少你自己的努力...

..这是第一个适当的例子,我刚发现的:

http://www.byteslounge.com/tutorials/spring-with-hibernate-persistence-and-transactions-example

看起来像:

...  
@Override
  @Transactional
  public void insertUser(User user) {
    userDAO.insertUser(user);
  }

  @Override
  @Transactional
  public User getUserById(int userId) {
    return userDAO.getUserById(userId);
  }

  @Override
  @Transactional
  public User getUser(String username) {
    return userDAO.getUser(username);
  }

  @Override
  @Transactional
  public List<User> getUsers() {
    return userDAO.getUsers();
  }