Java 我收到了HibernateException“;没有绑定到线程的Hibernate会话,配置不允许在此创建非事务会话;
尽管这里有很多类似的问题,但似乎没有什么对我有用。调用sessionFactory.getCurrentSession().createQuery(“从字符串”).list()时会出现异常 以下是我的root-context.xml:Java 我收到了HibernateException“;没有绑定到线程的Hibernate会话,配置不允许在此创建非事务会话;,java,hibernate,session,Java,Hibernate,Session,尽管这里有很多类似的问题,但似乎没有什么对我有用。调用sessionFactory.getCurrentSession().createQuery(“从字符串”).list()时会出现异常 以下是我的root-context.xml: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<context:annotation-config/>
<context:component-scan base-package="org.vadim.testmvc.dao"/>
<context:component-scan base-package="org.vadim.testmvc.service"/>
<import resource="data.xml"/>
</beans>
hibernate.cfg.xml:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<mapping class="org.vadim.testmvc.model.Strings"/>
</session-factory>
</hibernate-configuration>
我将非常感谢您在这个问题上提供的一切帮助。我认为问题的根源在于您没有通过接口访问您的服务。默认情况下,Spring使用基于Java接口的代理 顺便说一句,堆栈跟踪不包含任何事务性侦听器调用 参见文档下的第二个注释: 服务器上的代理目标类属性 元素控制为哪种类型的事务代理创建 用@Transactional注释注释的类。如果 代理目标类属性设置为true,则基于类的代理 创建。如果代理目标类为false或属性为 省略,创建标准的基于JDK接口的代理。(见 第7.6节“代理机制”,用于讨论不同 代理类型。)
因此,要么为事务服务和DAO引入接口,要么使用
proxy target class=“true”
这就是重点,感谢您的帮助!我刚刚为TestService和TestDAO添加了两个接口,这很有帮助!
package org.vadim.testmvc;
@Controller
public class TestController {
@Autowired
TestService testservice;
List<String> list = new LinkedList<String>();
int i=0;
@RequestMapping("/")
public String hello() {
return "redirect:/helloworld";
}
@RequestMapping(value = "/helloworld")
String listWord(Map<String, Object> map){
map.put("addRepeat", new Strings());
map.put("listStrings", testservice.listStrings());
return "helloworld";
}
@RequestMapping(value="/repeat", method = RequestMethod.POST)
String addRepeat(@ModelAttribute("addRepeat") Strings strings, BindingResult result) {
testservice.addStrings(strings);
return "redirect:/helloworld";
}
}
package org.vadim.testmvc.service;
@Service
public class TestService {
@Autowired
TestDAO testdao;
@Transactional
public List<Strings> listStrings(){
return testdao.listStrings();
}
@Transactional
public void addStrings(Strings strings){
testdao.addStrings(strings);
}
}
package org.vadim.testmvc.dao;
@Transactional
@Repository
public class TestDAO{
@Autowired
private SessionFactory sessionFactory;
public void addStrings(Strings strings){
sessionFactory.getCurrentSession().save(strings);
}
@SuppressWarnings("unchecked")
public List<Strings> listStrings(){
return sessionFactory.getCurrentSession().createQuery("from Strings").list();
}
}
SEVERE: Servlet.service() for servlet [appServlet] in context with path [/TestMVC] threw exception [Request processing failed; nested exception is org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here] with root cause
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)
at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:544)
at org.vadim.testmvc.dao.TestDAO.listStrings(TestDAO.java:23)
at org.vadim.testmvc.service.TestService.listStrings(TestService.java:18)
at org.vadim.testmvc.TestController.listWord(TestController.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:851)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at com.springsource.insight.collection.tcserver.request.HttpRequestOperationCollectionValve.invoke(HttpRequestOperationCollectionValve.java:84)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:278)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<mapping class="org.vadim.testmvc.model.Strings"/>
</session-factory>
</hibernate-configuration>
package org.vadim.testmvc.model;
@Entity
@Table(name="STRINGS")
public class Strings {
@Id
@Column(name="ID")
@GeneratedValue
private Integer id;
public Integer getId(){
return id;
}
@Column(name="TEXT")
private String text;
public String getText(){
return text;
}
public void setText(String text){
this.text=text;
}
}