Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我收到了HibernateException“;没有绑定到线程的Hibernate会话,配置不允许在此创建非事务会话;_Java_Hibernate_Session - Fatal编程技术网

Java 我收到了HibernateException“;没有绑定到线程的Hibernate会话,配置不允许在此创建非事务会话;

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:

尽管这里有很多类似的问题,但似乎没有什么对我有用。调用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://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;
    }


}