Hibernate: createQuery 没有主动交易无效
我的项目有一些问题 Spring + Hibernate. 当我尝试获取数据时,我有:
HTTP 状态500请求失败; 嵌套异常 org.hibernate.HibernateException: createQuery 不可接受,没有活动交易
这是我的代码 xml config:
一种方法 DAO
所有服务都标记为事务性。 我删除时
我有 Hibernate 错误:找不到当前流的会话。 我怎么解决这个问题?
UPDATED #2
全道
我现在有 "嵌套异常 org.hibernate.SessionException: 会议已经关闭"
- 怎么了?
更新
这就是我称之为这些方法的方式:
</user></user></user></user></user></user></user></user></user></beans>
HTTP 状态500请求失败; 嵌套异常 org.hibernate.HibernateException: createQuery 不可接受,没有活动交易
这是我的代码 xml config:
<beans xmlns="[url=http://www.springframework.org/schema/beans"]http://www.springframework.org/schema/beans"[/url] xmlns:tx="[url=http://www.springframework.org/schema/tx"]http://www.springframework.org/schema/tx"[/url] xmlns:xsi="[url=http://www.w3.org/2001/XMLSchema-instance"]http://www.w3.org/2001/XMLSchema-instance"[/url] xsi:schemalocation="[url=http://www.springframework.org/schema/beans]http://www.springframework.org/schema/beans[/url]
[url=http://www.springframework.org/schema/beans/spring-beans-3.0.xsd]http://www.springframework.org ... 0.xsd[/url]
[url=http://www.springframework.org/schema/tx]http://www.springframework.org/schema/tx[/url]
[url=http://www.springframework.org/schema/tx/spring-tx.xsd">]http://www.springframework.org ... gt%3B[/url]
<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/users"></property>
<property name="username" value="root"></property>
<property name="password" value="12345"></property>
</bean>
<bean class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" id="SessionFactory">
<property name="dataSource" ref="dataSource"></property>
<property name="annotatedClasses">
<list>
<value>com.springapp.model.User</value>
<value>com.springapp.model.UserRole</value>
<value>com.springapp.model.Project</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
</props>
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
<bean class="org.springframework.orm.hibernate4.HibernateTransactionManager" id="transactionManager">
<property name="sessionFactory" ref="SessionFactory"></property>
</bean>
一种方法 DAO
@Override
public List<user> showAllUsers//{
List<user> users = new ArrayList<user>//;
Session session = this.sessionFactory.getCurrentSession//;
users = session.createQuery/"from User"/.list//;
return users;
}
所有服务都标记为事务性。 我删除时
<prop key="hibernate.current_session_context_class">thread</prop>
我有 Hibernate 错误:找不到当前流的会话。 我怎么解决这个问题?
UPDATED #2
全道
@Autowired
private SessionFactory sessionFactory;
@SuppressWarnings/"unchecked"/
public User findByUserName/String username/ {
List<user> users = new ArrayList<user>//;
Session session = this.sessionFactory.getCurrentSession//;
session.beginTransaction//;
users = session
.createQuery/"from User where username=?"/
.setParameter/0, username/.list//;
session.getTransaction//.commit//;
session.close//;
if /users.size// > 0/ {
return users.get/0/;
} else {
return null;
}
}
@Override
public void addUser/User user/{
Session session = this.sessionFactory.getCurrentSession//;
session.save/user/;
}
@Override
public void deleteUser/User user/{
Session session = this.sessionFactory.getCurrentSession//;
System.out.println/user.getUsername///;
session.delete/user/;
}
@Override
public void verifyUser/User user/{
Session session = this.sessionFactory.getCurrentSession//;
session.update/user/;
}
@Override
public List<user> showAllUsers//{
List<user> users = new ArrayList<user>//;
Session session = this.sessionFactory.getCurrentSession//;
session.beginTransaction//;
users = session.createQuery/"from User"/.list//;
session.getTransaction//.commit//;
session.close//;
return users;
}
我现在有 "嵌套异常 org.hibernate.SessionException: 会议已经关闭"
- 怎么了?
更新
这就是我称之为这些方法的方式:
@RequestMapping/"/admin/updateUser"/
public String updateUser/ModelMap model,@ModelAttribute/"userId"/ String username/
{
User user = this.userService.findByUserName/username/;
if/user.isEnabled/// user.setEnabled/false/;
else user.setEnabled/true/;
this.userService.updateUser/user/;
return "redirect:/admin";
}
@RequestMapping/"/admin"/
public String adminPanel/ModelMap model/
{
List<user> users = this.userService.showAllUsers//;
model.addAttribute/"users",users/;
return "adminpanel";
}
</user></user></user></user></user></user></user></user></user></beans>
没有找到相关结果
已邀请:
2 个回复
小明明
赞同来自:
在创建请求之前。
所以:
为了改变
这意味着您正在尝试运行交易,而您尚未录制或未出发其他交易。 您必须修复您的会话。 /最好关闭会话/ 通过
在你之后 createQuery.
把它添加到你的 showAllUsers// 和 findByUserName//
祝你好运!
</user></user>
诸葛浮云
赞同来自:
反而