2011-07-28 5 views
0

Criteria API를 처음 접했을 때 Criteria API만을 위해 JBoss 6와 JPA 2.0에 최신 프로젝트를 적용했습니다. 이제Criteria API : query.from 만 null을 반환합니다.

내가 어떻게 든 성공하지 않고, 가장 쉬운 쿼리 실행을 얻기 위해 노력하고 있어요 :이 문제없이 작동 기준 API없이

(MSV 내 엔티티 클래스 인) :

Msv someMsv = manager.find(Msv.class, 1234L); 
System.out.println(someMsv); 

기준은 그러나 물건 나에게 DB에서 어떤 결과를 제공하지 않습니다

CriteriaBuilder builder = manager.getCriteriaBuilder(); 
CriteriaQuery<Msv> criteriaQuery = builder.createQuery(Msv.class); 
Root<Msv> from = criteriaQuery.from(Msv.class); 
// this returns null! /\ 
Path<Msv> pk = from.get("PK_MSV_NR"); 
Expression<Boolean> exp = builder.equal(pk, 1234L); 
CriteriaQuery<Msv> select = criteriaQuery.select(from).where(exp); 
[...] 

두 번째 코드를 실행

내가 5 행 (경로 PK에 던져 NullPointerException이 얻을 냈다. ..) 위의 cireriaQuery.from은 null을 반환합니다.

내가 본질적으로 뭔가를 놓치거나 무엇이 문제입니까? 첫 번째 스 니펫은 DB와 syso에서 올바른 항목을 가져올 수 있으므로 내 지속성 설정에 문제가 아니라 내 Criteria API 코드로 문제가되지 않는다고 생각했습니다. 하지만 그 중 하나는 기본적으로 한 줄씩 튜토리얼에서 가져 왔습니다.

기술 : 최대 절전 모드 - 3.6.6, 최대 절전 모드 - jpa-2.0-cr, jboss-as-6.0.0 및 oracle11을 사용하고 있습니다.

편집 : 이 좀 더 들여다 다음을 발견 : 그것은 실제로 criteriaQuery.from (...) 널 (null) 생산입니다. NullPointerException가 슬로우되지 않는 때문에 갔지()가 null 호출하지만, 실제로 갔지에서 /에 의해 슬로우 이다() 메소드. 나는 내 삶을 위해 왜 그런지 알 수 없다. 그러나 ...

답변

0

아아, 나는 결국 내가 잘못한 것을 발견했다. 나는 일식이 나를 위해 엔티티 클래스를 생성하도록 했으므로 필드의 명명법에 충분한주의를 기울이지 않았다.

그러나 엔티티 클래스에 'pkMsvNr'라는 이름 이클립스 나는 데이터베이스에 'PK_MSV_NR'라고 찾고 있던 필드. 그러므로 문제.

여전히 NullPointerException을 발생시키는 것은 이상한 행동입니다. 여기서 실제로 가리키는 null이별로 없습니다 ...

+1

JPA 2 정적 메타 모델 클래스를 사용해야하는 이유 중 하나는 컴파일 타임 안전을 제공하기 때문입니다. 최대 절전 모드 버전은 [Hibernate Metamodel Generator] (http://www.hibernate.org/subprojects/jpamodelgen.html)를 참조하십시오. –

+0

저는 이것을 구현하려고합니다. 저는 처음에 모든 새로운 API를 한 번에 시작하지 않고 메타 모델 생성에 대해 걱정하기 전에 일반 Criteria API를 설치하고 실행하는 것으로 생각했습니다. 후자는 매우 간단합니다. – fgysin

관련 문제