2013-03-07 1 views
1

다음 코드는 과 잘 동작한다.HSQLDB 메모리 내 데이터베이스를 사용할 때, Hibernate/JPA EntityManager는 HSQL 스크립트에 대한 매개 변수를 취하지 않는다.

그러나 단위 (시험) 데이터베이스,

쿼리 쿼리 = entityManager.createQuery는 ("CartInvoiceEntity C로부터 C를 선택 HSQLDB에 메모리 전환시에 동일한 코드 WHERE c.invoiceId가 = 실패 invoiceId을 ");

query.setParameter ("invoiceId", cartInvoiceEntity.getInvoiceId()); 다음과 같은 오류 메시지가

:

org.hibernate.QueryParameterException : 쿼리 개체가 매개 변수 [invoiceId]

디버깅 질의 객체시에 검사 이름을 찾을 수 없습니다, 내가 발견 매개 변수 필드. MySQL을 사용할 때,이 매개 변수는 HashMap에 "invoiceId"를 포함합니다. 그러나 HSQLDB로 전환 할 때이 HashMap은 비어 있습니다. 이것이 예외가 throw 된 이유입니다. 문제는 HSQLDB가 사용되는 HashMap이 비어있는 이유입니다. 1.0.1.Final가 사용되며 간접적으로 모두 최대 절전 모드 코어에서 참조 :

관련 메이븐 의존성

종속성 계층 구조에서
<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.1.9.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>4.1.9.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.16</version> 
    </dependency> 
    <dependency> 
     <groupId>hsqldb</groupId> 
     <artifactId>hsqldb</artifactId> 
     <version>1.8.0.10</version> 
     <scope>test</scope> 
    </dependency> 

입니다 다음, 나는-최대 절전 모드 JPA-2.0.api 볼 수 있습니다 및 hibernate-entitymanager JAR을 포함한다.

도움이 되었으면 좋겠습니다.

+0

2.2.9와 같은 최신 버전의 HSQLDB를 사용해 보시지 않겠습니까? – fredt

답변

0

근본 원인을 발견했습니다. 유닛 테스트 (반드시 HSQLDB와 같은 메모리 데이터베이스가 있거나없는 것은 아닙니다), 어떻게 든 스프링 컴포넌트 스캔 메커니즘은 JPA 지속성 설정에 대해 올바르게 작동하지 않습니다. 이로 인해 Hibernate가 매개 변수를 찾지 못하게됩니다. Hibernate는 엔티티 클래스를 아는 경우에만 매개 변수를 찾습니다.

내 수정 직접 ( org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean에서의 EntityManagerFactory를 만들 때 그렇게하는 방법을 모른다)의 persistence.xml에 (엔티티 클래스) 클래스 추가 항목이다.

<persistence-unit name="my_unit"> 
    ... 
    <class>my.entity.CartInvoiceEntity</class> 
    ... 
</persistence-unit> 

참조 :

http://www.springbyexample.org/examples/one-to-many-jpa-hibernate-config-jpa-config.html http://www.aoiblog.com/wp-content/uploads/2010/02/two.jpg

하지만 다음과 같이 자신을 HSQLDB 예정이다 다른 문제가 발생했다. org.hibernate.exception.GenericJDBCException :

가에 의한이 기능은 업그레이드 HSQLDB의 버전에서 해결 된

이 문제

지원되지 않습니다.

Function not supported from hibernate

감사합니다 다음에 유래 링크를 참조하십시오.

+0

Java를 사용하여 LocalContainerEntityManagerFactoryBean을 구성하여 persistence.xml을 피하려는 경우 엔티티 클래스가있는 패키지를 검색 할 수 있습니다. bean.setPersistenceUnitName ("my_unit"); bean.setPackagesToScan ("my.entity"); –

관련 문제