简体   繁体   English

在Spring 3,maven,JPA,c3p0中处于休眠状态的“ java.lang.NoSuchFieldError:NONE”

[英]“java.lang.NoSuchFieldError: NONE” in hibernate with Spring 3, maven, JPA, c3p0

Problem: 问题:

Hibernate is not executing queries correctly. Hibernate未正确执行查询。 It errors with a problem that appears to be related to slf4j but using any recommended fixes don't seem to work. 它因似乎与slf4j相关的问题而出错,但使用任何建议的修复程序似乎均无效。

I've tried various combinations of variable names for the createQuery call, in hopes I was Doing It Wrong(TM) but no luck so far. 我已经为createQuery调用尝试了各种变量名组合,希望我做的是Doing It Wrong(TM),但到目前为止还没有碰到运气。 This problem really has me stumped, has anyone come across something similar before? 这个问题真的让我感到难过,有人遇到过类似的事情吗?

Stack Trace: 堆栈跟踪:

Exception in thread "main" java.lang.NoSuchFieldError: NONE
    at org.hibernate.ejb.QueryImpl.<init>(QueryImpl.java:604)
    at org.hibernate.ejb.QueryImpl.<init>(QueryImpl.java:79)
    at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:268)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:341)
    at $Proxy12.createQuery(Unknown Source)
    at com.package.mvcfromscratch.dao.PostgresEventDao.numberOfEvents(PostgresEventDao.java:17)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
    at $Proxy11.numberOfEvents(Unknown Source)
    at com.package.mvcfromscratch.main.UserInterface.main(UserInterface.java:27)

Maven dependency tree: Maven依赖树:

[INFO] com.package:mvcFromScratch:jar:0.0.1-SNAPSHOT
[INFO] +- org.springframework:spring-context:jar:3.0.3.RELEASE:compile
[INFO] |  +- org.springframework:spring-expression:jar:3.0.3.RELEASE:compile
[INFO] |  \- org.springframework:spring-asm:jar:3.0.3.RELEASE:compile
[INFO] +- org.springframework:spring-beans:jar:3.0.3.RELEASE:compile
[INFO] +- org.springframework:spring-aop:jar:3.0.3.RELEASE:compile
[INFO] |  \- aopalliance:aopalliance:jar:1.0:compile
[INFO] +- org.springframework:spring-web:jar:3.0.3.RELEASE:compile
[INFO] +- org.springframework:spring-core:jar:3.0.3.RELEASE:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] +- org.springframework:spring-test:jar:3.0.3.RELEASE:compile
[INFO] +- org.springframework:spring-jpa:jar:2.0.8:compile
[INFO] |  +- org.springframework:spring-dao:jar:2.0.8:compile
[INFO] |  \- org.springframework:spring-jdbc:jar:2.0.8:compile
[INFO] +- org.springframework:spring-tx:jar:3.0.3.RELEASE:compile
[INFO] +- org.hibernate:hibernate:jar:3.5.3-Final:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.5.8:compile
[INFO] +- org.hibernate:hibernate-core:jar:3.5.3-Final:compile
[INFO] |  +- antlr:antlr:jar:2.7.6:compile
[INFO] |  +- commons-collections:commons-collections:jar:3.1:compile
[INFO] |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] |  \- javax.transaction:jta:jar:1.1:compile
[INFO] +- org.hibernate:hibernate-annotations:jar:3.5.3-Final:compile
[INFO] +- org.hibernate:hibernate-commons-annotations:jar:3.3.0.ga:compile
[INFO] |  \- javax.persistence:persistence-api:jar:1.0:compile
[INFO] +- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.0.Final:compile
[INFO] +- org.hibernate:hibernate-entitymanager:jar:3.5.3-Final:compile
[INFO] |  +- cglib:cglib:jar:2.2:compile
[INFO] |  |  \- asm:asm:jar:3.1:compile
[INFO] |  \- javassist:javassist:jar:3.9.0.GA:compile
[INFO] +- postgresql:postgresql:jar:8.4-702.jdbc4:compile
[INFO] \- org.slf4j:slf4j-simple:jar:1.5.8:compile

PostgreSql database: PostgreSQL数据库:

diarmaid=# \d Event;
                                       Table "public.event"
    Column     |          Type          |                        Modifiers                        
---------------+------------------------+---------------------------------------------------------
 eventid       | integer                | not null default nextval('event_eventid_seq'::regclass)
 eventname     | character varying(255) | 
 eventdate     | character varying(255) | 
 eventcapacity | bigint                 | 
Indexes:
    "event_pkey" PRIMARY KEY, btree (eventid)

UserInterface class: UserInterface类:

public class UserInterface {

    /**
     * @param args
     */
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationcontext.xml");
        EventDao eventDao = applicationContext.getBean("eventDao", EventDao.class);

        // Are there any events?
        System.out.println("Events: " + eventDao.numberOfEvents());
        // Get all events
        List<Event> listEvents = eventDao.getAllEvents();
        // & Print them all out.
        for(Event event : listEvents) {
            System.out.println(event);
        }
        System.out.println(eventDao.getEvent(2));
    }

}

PostgresEventDao class: PostgresEventDao类:

public class PostgresEventDao extends JpaDaoSupport implements EventDao {

    @Override
    public String numberOfEvents() {
        return (String) getJpaTemplate()
            .getEntityManagerFactory()
            .createEntityManager()
            .createQuery("select count(ev.id) from Event ev")
            .getSingleResult();
    }

    @Override
    public List<Event> getAllEvents() {
        return getJpaTemplate().find("from Event");
    }

    @Override
    public Event getEvent(long id) {
        return (Event) getJpaTemplate()
            .getEntityManagerFactory()
            .createEntityManager()
            .createQuery("select d from Event d where d.id = " + id)
            .getSingleResult();
    }

    @Override
    @Transactional
    public void setAllEvents(List<Event> listEvent) {
        for(Event event : listEvent) {
            getJpaTemplate().persist(event);
        }

    }

}

persistence.xml: persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    <persistence-unit name="Events">
        <class>com.package.mvcfromscratch.entities.Event</class>
        <properties>
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.connection.driver_class"
                value="org.postgresql.Driver" />
            <property name="hibernate.connection.url"
                value="jdbc:postgresql://localhost/diarmaid" />
            <property name="hibernate.connection.username"
                value="diarmaid" />
            <property name="hibernate.connection.password"
                value="sqlol" />

            <property name="hibernate.c3p0.min_size" value="5" />
            <property name="hibernate.c3p0.max_size" value="20" />
            <property name="hibernate.c3p0.timeout" value="300" />
            <property name="hibernate.c3p0.max_statements" value="50" />
            <property name="hibernate.c3p0.idle_test_period" value="3000" />
        </properties>
    </persistence-unit>

</persistence>

And finally, applicationcontext.xml: 最后,applicationcontext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

    <bean id="eventDao" class="com.package.mvcfromscratch.dao.PostgresEventDao"
        autowire="byType">
        <property name="jpaTemplate" ref="jpaTemplate" />
    </bean>

    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="Events" />
    </bean>

    <bean id="jpaTemplate" class="org.springframework.orm.jpa.JpaTemplate">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <tx:annotation-driven transaction-manager="myTransactionManager" />

    <bean id="myTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
</beans>

You included old version of hibernate-commons-annotations , which transitively included JPA 1.0, which conflicts with JPA 2.0 required by Hibernate 3.5. 您包含了hibernate-commons-annotations旧版本,该版本可传递地包含JPA 1.0,该版本与Hibernate 3.5所需的JPA 2.0冲突。

Moreover, since Hibernate 3.5 you don't need to include multiple Hibernate artifacts anymore. 而且,由于Hibernate 3.5,您不再需要包含多个Hibernate构件。 You only need to declare hibernate-entitymanager in pom.xml , it should be enough for your setup. 您只需要在pom.xml声明hibernate-entitymanager ,它对于您的设置就足够了。

See also: 也可以看看:

It's complaining about this code line in org.hibernate.ejb.QueryImpl : 它在org.hibernate.ejb.QueryImpl抱怨此代码行:

private javax.persistence.LockModeType jpaLockMode
   = javax.persistence.LockModeType.NONE;

Since javax.persistence.LockModeType.NONE is new in JPA2, I suspect you also have JPA1 on your classpath somewhere. 由于javax.persistence.LockModeType.NONE在JPA2是新的,我怀疑你也有JPA1在classpath的某处。 Find and remove it. 查找并删除它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.lang.NoSuchFieldError:在使用Cloud SQL在GAE上运行的JPA 1.0 Hibernate上没有问题 - java.lang.NoSuchFieldError: NONE issue on JPA 1.0 Hibernate running on GAE with Cloud SQL 休眠和Java持久性API-java.lang.NoSuchFieldError:无 - Hibernate and Java persistence API - java.lang.NoSuchFieldError: NONE Eclipse - Shazamcrest - java.lang.NoSuchFieldError:NONE - Eclipse - Shazamcrest - java.lang.NoSuchFieldError: NONE 使用 JPA 时出现“java.lang.NoSuchFieldError” - 'java.lang.NoSuchFieldError' while using the JPA 休眠状态:org.glassfish.jersey.server.ContainerException:java.lang.NoSuchFieldError:NONE - Hibernate : org.glassfish.jersey.server.ContainerException: java.lang.NoSuchFieldError: NONE Spring 3 + Hibernate 4 + C3P0:java.lang.NoSuchMethodError:org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.addAnnotatedClass - Spring 3 + Hibernate 4 + C3P0: java.lang.NoSuchMethodError: org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.addAnnotatedClass 播放框架2.5 JPAApi:java.lang.NoSuchFieldError:无 - Play framework 2.5 JPAApi: java.lang.NoSuchFieldError: NONE Eclipse中的JUnit和Maven构建失败,并带有java.lang.NoSuchFieldError:地址? - JUnit and Maven build fails in eclipse with java.lang.NoSuchFieldError: address? 当尝试将JBPM与MAVEN集成时java.lang.NoSuchFieldError:DESCR - When trying to integrate JBPM with MAVEN java.lang.NoSuchFieldError: DESCR java.lang.NoSuchFieldError:sqlResultSetMappings - java.lang.NoSuchFieldError: sqlResultSetMappings
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM