这个错误是什么意思,我该如何解决?

问题描述:

我使用这是由Hibernate工具生成此DAO类:这个错误是什么意思,我该如何解决?

/** 
* Home object for domain model class Empleados. 
* @see com.hibernate.Empleados 
* @author Hibernate Tools 
*/ 
public class EmpleadosHome { 

    private static final Log log = LogFactory.getLog(EmpleadosHome.class); 

    private final SessionFactory sessionFactory = getSessionFactory(); 

    protected SessionFactory getSessionFactory() { 
     try { 
      return (SessionFactory) new InitialContext() 
        .lookup("java:/hibernate/SessionFactory"); 
     } catch (Exception e) { 
      log.error("Could not locate SessionFactory in JNDI", e); 
      throw new IllegalStateException(
        "Could not locate SessionFactory in JNDI"); 
     } 
    } 

    public void persist(Empleados transientInstance) { 
     log.debug("persisting Empleados instance"); 
     try { 
      sessionFactory.getCurrentSession().persist(transientInstance); 
      log.debug("persist successful"); 
     } catch (RuntimeException re) { 
      log.error("persist failed", re); 
      throw re; 
     } 
    } 

    public void attachDirty(Empleados instance) { 
     log.debug("attaching dirty Empleados instance"); 
     try { 
      sessionFactory.getCurrentSession().saveOrUpdate(instance); 
      log.debug("attach successful"); 
     } catch (RuntimeException re) { 
      log.error("attach failed", re); 
      throw re; 
     } 
    } 

    public void attachClean(Empleados instance) { 
     log.debug("attaching clean Empleados instance"); 
     try { 
      sessionFactory.getCurrentSession().lock(instance, LockMode.NONE); 
      log.debug("attach successful"); 
     } catch (RuntimeException re) { 
      log.error("attach failed", re); 
      throw re; 
     } 
    } 

    public void delete(Empleados persistentInstance) { 
     log.debug("deleting Empleados instance"); 
     try { 
      sessionFactory.getCurrentSession().delete(persistentInstance); 
      log.debug("delete successful"); 
     } catch (RuntimeException re) { 
      log.error("delete failed", re); 
      throw re; 
     } 
    } 

    public Empleados merge(Empleados detachedInstance) { 
     log.debug("merging Empleados instance"); 
     try { 
      Empleados result = (Empleados) sessionFactory.getCurrentSession() 
        .merge(detachedInstance); 
      log.debug("merge successful"); 
      return result; 
     } catch (RuntimeException re) { 
      log.error("merge failed", re); 
      throw re; 
     } 
    } 

    public Empleados findById(java.lang.Integer id) { 
     log.debug("getting Empleados instance with id: " + id); 
     try { 
      Empleados instance = (Empleados) sessionFactory.getCurrentSession() 
        .get("com.hibernate.Empleados", id); 
      if (instance == null) { 
       log.debug("get successful, no instance found"); 
      } else { 
       log.debug("get successful, instance found"); 
      } 
      return instance; 
     } catch (RuntimeException re) { 
      log.error("get failed", re); 
      throw re; 
     } 
    } 

    public List findByExample(Empleados instance) { 
     log.debug("finding Empleados instance by example"); 
     try { 
      List results = sessionFactory.getCurrentSession().createCriteria(
        "com.hibernate.Empleados").add(Example.create(instance)) 
        .list(); 
      log.debug("find by example successful, result size: " 
        + results.size()); 
      return results; 
     } catch (RuntimeException re) { 
      log.error("find by example failed", re); 
      throw re; 
     } 
    } 
} 

这是我hibernate.cfg.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory name="SessionFactory"> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.password">1234</property> 
     <property name="hibernate.connection.url">jdbc:mysql://localhost:3307/ejemplos</property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> 
     <property name="connection.autocommit">true</property> 
     <property name="current_session_context_class">jta</property> 
     <mapping resource="com/hibernate/Empleados.hbm.xml" /> 
    </session-factory> 
</hibernate-configuration> 

我得到以下异常:

org.hibernate.HibernateException: Unable to locate current JTA transaction 
    at org.hibernate.context.JTASessionContext.currentSession(JTASessionContext.java:88) 
    at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:574) 
    at com.hibernate.EmpleadosHome.findById(EmpleadosHome.java:95) 
    at org.apache.jsp.index_jsp._jspService(index_jsp.java:75) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) 
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) 
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) 
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
    at java.lang.Thread.run(Thread.java:619) 
+0

欢迎来到StackOverflow!要发布代码,请将所有代码缩进四个空格。在编辑时查看右侧的格式提示列表,和/或阅读格式化帮助:http://stackoverflow.com/editing-help(编辑:看起来像Pointy为你修复它,但下一次...) – 2010-09-20 18:26:06

结帐本页:https://forum.hibernate.org/viewtopic.php?f=1&t=951402

看起来像它可能是你的应用程序服务器的配置问题

+0

好吧即时通讯使用jboss作为5.1我想它可以管理交易完全删除任何交易分界从道教类.... – 2010-09-26 15:08:57

+0

任何想法这个问题????? – 2010-09-26 15:09:36

我不确定你的环境是否支持JTA和自动事务处理(至少与当前设置不同)。而实际上,如果你不打算访问多个事务资源,我的建议是使用默认的JDBC方法,即修改hibernate.cfg.xml如下:

<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> 
<property name="current_session_context_class">thread</property> 

,并重新生成代码(我没有很多Hibernate Tools生成的DAO经验,我不保证结果)。

用openSession替换getCurrentSession()