2010-12-04 2 views
2

JPA : JQL과 SQL의 차이점

예를 들면 다음과 같습니다.

Customer c =(Customer) manager.createQuery("SELECT c FROM Customer c").getResultList().get(0);

이 코드는 Java Persistence Query Language를 사용하기 때문에 작동합니다.

Customer c = (Customer) manager.createNativeQuery("SELECT * FROM Customer LIMIT 1").getSingleResult();

비슷한 코드와 Customer에 대한 네이티브 쿼리 캐스트를 사용하면 ClassCastException가 발생합니다.

그러면 질문이 생깁니다. SQL을 사용하여 원시 쿼리에서 결과로 개체를 만들 수 있습니까?

답변

4

나는 당신이 createNativeQuery에 대한 documentation 한 번 봐 걸릴 수 있다고 생각 (2 PARAMS로 하나를, 임 링크에 문제가)

그냥 createNativeQuery 전화로 원하는 클래스를 통과 ....

1

분명히 저것을 보지 못했습니다. JQL을 배우는 것보다 훨씬 편리한 방법 인 것 같습니다.

그러나 잠재적 인 함정 일 수있는 또 다른 문제가 있습니다. 경우에 따라 필드 이름을 대문자로 입력해야하는 경우도 있습니다.

나는 확신 할 수는 없지만 기본 쿼리를 사용할 때 매우 일반적 인 경우 감도 문제 으로 실행 수 있습니다. JP35는 이름을 대문자로 기본 설정하고 필드 이름을 소문자로 반환 할 수있는 데이터베이스를 사용하는 경우 Java 문자열 비교에서 대소 문자를 구분하므로 필드가 발견되지 않을 수 있습니다. 이 은 "ID"의 값을 찾을 때 결과 집합에서 을 반환합니다.

은 빠른 답변 Oracle Forums - primary key detected to be null, but it isn't

감사에서 인용.

+0

별도의 질문으로 질문하십시오. – hvgotcodes

+0

이것은 하나의 문제가 해결 되 자마자 다음 정보를 얻었 기 때문에 이것은 문제가되지 않습니다. 추가 정보입니다. 어쨌든 – phineas