[SPRING] "java.lang.NoSuchFieldError : NONE"Spring 3, maven, JPA, c3p0을 사용하여 최대 절전 모드에서
SPRING"java.lang.NoSuchFieldError : NONE"Spring 3, maven, JPA, c3p0을 사용하여 최대 절전 모드에서
문제:
Hibernate는 질의를 정확하게 실행하지 않는다. slf4j와 관련된 것으로 보이는 문제로 인해 오류가 발생하지만 권장되는 수정 사항을 사용하면 작동하지 않는 것 같습니다.
createQuery 호출에 대한 변수 이름의 다양한 조합을 시도했는데, 잘못된 일을하기를 원했지만 (TM) 그러나 지금까지는 행운이 없었다. 이 문제는 정말로 저에게 곤란을 겪었습니다. 이전에 비슷한 것을 경험해 본 사람이 있습니까?
스택 추적 :
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 의존성 트리 :
[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 데이터베이스 :
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 클래스 :
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 클래스 :
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 :
<?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>
마지막으로 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>
해결법
-
==============================
1.이전 버전의 hibernate-commons-annotations가 포함되어 있습니다. JPA 1.0은 JPA 1.0을 포함하고 있으며, 이는 Hibernate 3.5가 요구하는 JPA 2.0과 충돌합니다.
이전 버전의 hibernate-commons-annotations가 포함되어 있습니다. JPA 1.0은 JPA 1.0을 포함하고 있으며, 이는 Hibernate 3.5가 요구하는 JPA 2.0과 충돌합니다.
또한 Hibernate 3.5 이후로 더 이상 최대 절전 모드 아티팩트를 포함 할 필요가 없다. pom.xml에서 hibernate-entitymanager를 선언하기 만하면된다.
참조 :
-
==============================
2.org.hibernate.ejb.QueryImpl에서이 코드 라인에 대해 불평하고있다.
org.hibernate.ejb.QueryImpl에서이 코드 라인에 대해 불평하고있다.
private javax.persistence.LockModeType jpaLockMode = javax.persistence.LockModeType.NONE;
JPA2에서는 javax.persistence.LockModeType.NONE이 새롭기 때문에 어딘가에 클래스 패스에 JPA1이 있다고 의심됩니다. 그것을 찾아서 제거하십시오.
from https://stackoverflow.com/questions/5727463/java-lang-nosuchfielderror-none-in-hibernate-with-spring-3-maven-jpa-c3p0 by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 데이터 REST로 고급 검색을 수행하는 방법은 무엇입니까? (0) | 2019.02.27 |
---|---|
[SPRING] Spring 웹 플로우에서 "죽은"세션 잡기 (0) | 2019.02.27 |
[SPRING] 여러 개의 주석이 발견되었습니다. 일치하는 와일드 카드가 엄격하지만 'ehcache : annotation-driven'요소에 대한 선언을 찾을 수 없습니다. (0) | 2019.02.27 |
[SPRING] 하나의 애플리케이션에 Spring Security OAuth2와 FormLogin (0) | 2019.02.27 |
[SPRING] 콩을 생성하는 동안 발생하는 예외의 올바른 처리 (0) | 2019.02.26 |