Hibernate:createCriteria 在没有活动事务的情况下无效
Hibernate: createCriteria is not valid without active transaction
我是 Hibernate 新手。使用版本 3 并遇到以下问题。
我正在使用 hibernatetool ant 任务生成 DAO 类
当我 运行 我的第一个单元测试时,我得到以下错误:
No CurrentSessionContext configured! org.hibernate.HibernateException:
No CurrentSessionContext configured!at
org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:542)
所以我进行了 google 搜索并将这一行添加到我的 hibernate.cfg.xml:
<property name="current_session_context_class">thread</property>
之后,我在尝试持久化对象时遇到以下错误:
org.hibernate.HibernateException: createCriteria is not valid without active transaction
很好,所以我手动开始并提交了一个 t运行saction。
所以我坚持这样:
代码:
Transaction tx=null;
tx = session.beginTransaction();
sessionFactory.getCurrentSession().persist(transientInstance);
成功!
那么,我的问题是:
- 所有操作都必须明确地成为 t运行saction 的一部分,那么为什么 Hibernate 工具代码生成器没有将其也放入我的 DAO 中?是否也可以通过 ant 任务添加这些行,那么如何?
tx = session.beginTransaction();
- 什么是 CurrentSessionContext?我提供了值 "thread"。那是什么意思?还有哪些选择?
你可以尝试使用Spring-Annotations -
"@Transactional"
尽量减少您自己的努力...
..这是我刚刚发现的第一个充分的例子:
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();
}
我是 Hibernate 新手。使用版本 3 并遇到以下问题。
我正在使用 hibernatetool ant 任务生成 DAO 类
当我 运行 我的第一个单元测试时,我得到以下错误:
No CurrentSessionContext configured! org.hibernate.HibernateException: No CurrentSessionContext configured!at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:542)
所以我进行了 google 搜索并将这一行添加到我的 hibernate.cfg.xml:
<property name="current_session_context_class">thread</property>
之后,我在尝试持久化对象时遇到以下错误:
org.hibernate.HibernateException: createCriteria is not valid without active transaction
很好,所以我手动开始并提交了一个 t运行saction。
所以我坚持这样: 代码:
Transaction tx=null;
tx = session.beginTransaction();
sessionFactory.getCurrentSession().persist(transientInstance);
成功!
那么,我的问题是:
- 所有操作都必须明确地成为 t运行saction 的一部分,那么为什么 Hibernate 工具代码生成器没有将其也放入我的 DAO 中?是否也可以通过 ant 任务添加这些行,那么如何?
tx = session.beginTransaction();
- 什么是 CurrentSessionContext?我提供了值 "thread"。那是什么意思?还有哪些选择?
你可以尝试使用Spring-Annotations -
"@Transactional"
尽量减少您自己的努力...
..这是我刚刚发现的第一个充分的例子:
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();
}