2011-02-24 146 views
17

我是Java和Hibernate的新手(是Rails和C#開發人員)。無論如何,我有一個測試程序,它正常工作與休眠,但我實際的Web應用程序(的Struts 1)與崩潰:Hibernate NoSuchFieldError INSTANCE,但僅適用於Struts 1?

SEVERE: Servlet.service() for servlet default threw exception java.lang.NoSuchFieldError: INSTANCE

我使用:

Hibernate 3.6.1 with Annotations

Struts 1 with Apache Tiles

C3P0 connection pool

這裏是程序,一個通常爲作品。這是主要項目的一部分。只是一個簡單的JAVA測試。

public class TestUser { 

    public static void main(String[] args) { 

    SessionFactory factory = HibernateUtil.getSessionFactory(); 
    Session session = factory.getCurrentSession(); 
    session.beginTransaction(); 

    String queryString = "from User where UserName = 'Quake'"; 
    Query query = session.createQuery(queryString); 

    User quake = (User)query.uniqueResult(); 
    session.getTransaction().commit(); 

    System.out.println(quake.getEmail()); 
    System.out.println("Active? " + quake.isActive()); 


    UserRepository userRepo = new UserRepository(); 

    System.out.println("User Quake: " + userRepo.findAll().get(0).getEmail()); 

    } 
} 

工作得很好。輸出一些樣本數據。

現在,當我嘗試在Struts中做同樣的事情時,我得到了異常。這是什麼NOT WORK

public class ListUsers extends org.apache.struts.action.Action { 

    /* forward name="success" path="" */ 
    private static final String SUCCESS = "success"; 

/** 
* This is the action called from the Struts framework. 
* @param mapping The ActionMapping used to select this instance. 
* @param form The optional ActionForm bean for this request. 
* @param request The HTTP Request we are processing. 
* @param response The HTTP Response we are processing. 
* @throws java.lang.Exception 
* @return 
*/ 
@Override 
public ActionForward execute(ActionMapping mapping, ActionForm form, 
     HttpServletRequest request, HttpServletResponse response) 
     throws Exception { 


    List<String> listMsg = new ArrayList<String>(); 

    listMsg.add("Message A"); 
    listMsg.add("Message B"); 
    listMsg.add("Message C"); 
    listMsg.add("Message D"); 

    request.setAttribute("listMsg", listMsg); 



    UserRepository userRepo = new UserRepository(); // CRASHES HERE (see HibernateUtil) 
    String email = userRepo.first().getEmail(); 


    return mapping.findForward(SUCCESS); 
    } 
} 

這是我的HibernateUtil類:

public class HibernateUtil { 

    private static final SessionFactory sessionFactory = buildSessionFactory(); 

    private static SessionFactory buildSessionFactory() { 
    try { 
     // Create the SessionFactory from hibernate.cfg.xml 
     Configuration config = new Configuration(); // THIS LINE CRASHES IN STRUTS 

     // Add annotated classes 
     config.addAnnotatedClass(User.class); 

     config.configure(); 
     return config.buildSessionFactory(); 

    } catch (Throwable ex) { 
     // Make sure you log the exception, as it might be swallowed 
     System.err.println("Initial SessionFactory creation failed. WTFQNIL: " + ex); 
     throw new ExceptionInInitializerError(ex); 
    } 
    } 

    public static SessionFactory getSessionFactory() { 
    return sessionFactory; 
    } 
} 

Configuration config = new Configuration()線在HibernateUtil的是,在Struts的崩潰行,但不是測試應用程序。

下面是完整的異常轉儲:

Feb 24, 2011 9:51:58 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet default threw exception 
java.lang.NoSuchFieldError: INSTANCE 
at org.hibernate.type.BasicTypeRegistry.<init>(BasicTypeRegistry.java:94) 
at org.hibernate.type.TypeResolver.<init>(TypeResolver.java:59) 
at org.hibernate.cfg.Configuration.<init>(Configuration.java:249) 
at org.hibernate.cfg.Configuration.<init>(Configuration.java:300) 
at com.kencogroup.kkms.struts.utilities.HibernateUtil.buildSessionFactory(HibernateUtil.java:22) 
at com.kencogroup.kkms.struts.utilities.HibernateUtil.<clinit>(HibernateUtil.java:17) 
at com.kencogroup.dao.repositories.UserRepository.first(UserRepository.java:33) 
at com.kencogroup.kkms.struts.actions.ListUsers.execute(ListUsers.java:52) 
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425) 
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228) 
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
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.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) 
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) 
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) 
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) 
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) 
at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213) 
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171) 
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) 
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) 
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
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:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859) 
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) 
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555) 
at java.lang.Thread.run(Thread.java:662) 

我在做什麼錯?

謝謝!

回答

21

看起來你在類路徑中有幾個Hibernate jars版本。

+0

這裏是我的JARS for Hibernate的屏幕截圖。我創建了一個全球圖書館。 http://dl.dropbox.com/u/471665/jars.png – cbmeeks 2011-02-24 16:29:48

+4

+1指向我的一般區域。原來,我有一箇舊版本的hibernate-annotations,我不需要,因爲Hibernate 3.6帶有註釋支持?無論如何,現在的作品。 – cbmeeks 2011-02-24 18:36:10

+0

@cbmeeks:的確,這是原因。 – axtavt 2011-02-24 19:12:13

0

@axtavt說得對。 我知道你已經解決了這個問題,我發表了我的評論,因爲它可能對其他人有幫助。

如果您使用的是maven依賴關係,假設您已經擁有自己的hibernate依賴關係。後來,另一個依賴項(如org.codehaus.jackson或drools-spring)被添加到pom中。它可能會導致這個錯誤,因爲org.codehaus.jackson和drools-spring在不同版本的hibernate上有自己的依賴關係。在添加org.codehaus.jackson或drools-spring將解決問題時排除冬眠。

1

刪除這兩個依賴關係爲我工作。

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-commons-annotations</artifactId> 
     <version>3.0.0.ga</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-annotations</artifactId> 
     <version>3.3.0.ga</version> 
    </dependency> 

這是我的Hibernate依賴。

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>3.6.3.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.javassist</groupId> 
    <artifactId>javassist</artifactId> 
    <version>3.17.1-GA</version> 
</dependency> 
<dependency> 
    <groupId>asm</groupId> 
    <artifactId>asm-all</artifactId> 
    <version>2.2</version> 
</dependency> 
<dependency> 
    <groupId>antlr</groupId> 
    <artifactId>antlr</artifactId> 
    <version>2.7.7</version> 
</dependency> 
<dependency> 
<groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>3.6.3.Final</version> 
</dependency> 
相關問題