[英]“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.