2010-09-20 141 views
1

我使用這是由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

回答

0

結帳本頁: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

1

我不確定你的環境是否支持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經驗,我不保證結果)。

0

用openSession替換getCurrentSession()

相關問題