JPA에서 준비된 진술을 사용하는 방법
-
21-12-2019 - |
문제
나는 Play 프레임 워크 응용 프로그램 개발자입니다. JPA에서 CreateNatialQuery 메소드를 사용하고 있습니다.이 예에서는 준비된 문을 사용하고 싶습니다.누구든지 도와주세요. JPA가없는 코드는 다음과 같습니다.준비된 진술로 변환하는 데 도움이 필요합니다.
Query query = JPA.em().createNativeQuery("select count(*) from truck t inner join" +
"box b where t.truck_id=b.truck_id and t.shipment_upc='" + code + "'");
BigInteger val = (BigInteger)query.getSingleResult();
System.out.println(val);
. 해결책
Query query = JPA.em().createNativeQuery("select count(*) from truck t inner join box b where t.truck_id=b.truck_id and t.shipment_upc=:code");
query.setParameter("code", code);
. 다른 팁
간략한 요약
여기에서 쿼리 매개 변수를 사용해야하지만 기본 쿼리 을 사용하는 이래로 JPQL과 비교하여 옵션이 제한 될 수 있습니다.
세계의 국가
JPA는 기본 쿼리를 지원하지 않지만 일부 JPA 공급자는
hibernate의 JPA 라는 매개 변수를 지원합니다 :
기본 SQL 쿼리는 위치뿐만 아니라 명명 된 매개 변수
용액
hibernate
Subir Kumar Sao의 답변 방법을 보여줍니다. 명명 된 매개 변수를 사용하여 이것을 해결하십시오. 적어도 최대 절전 모드에서 가능합니다.
비교를 위해 여기에서 그것을 반복 할 것입니다 :
Query query = JPA.em().createNativeQuery(
"SELECT COUNT(*) "+
"FROM truck AS t "+
"INNER JOIN box b "+
"WHERE t.truck_id = b.truck_id "+
"AND t.shipment_upc = :code"
);
query.setParameter("code", code);
.
일반 JPA (EclipseLink 포함)
eclipseLink (2.5.1)가 지정된 매개 변수가 지원되지 않았 음을 발견했습니다.
대신 위치 매개 변수를 사용해야합니다. 이것들은 명시적이고 암시 적으로 두 가지 방법으로 표현 될 수 있습니다.
명시 적 인덱스
?1
(또는 다른 번호)를 사용하여 매개 변수를 표시합니다. 이 인덱스는 쿼리에서 특정 매개 변수를 고유하게 식별하는 데 사용할 수 있습니다.
Query query = JPA.em().createNativeQuery(
"SELECT COUNT(*) "+
"FROM truck AS t "+
"INNER JOIN box b "+
"WHERE t.truck_id = b.truck_id "+
"AND t.shipment_upc = ?1"
);
query.setParameter(1, code);
.
암시 적 인덱스
Just ?
를 사용하여 매개 변수를 표시합니다. 이 인덱스는 쿼리 문자열에 참여하는 모든 매개 변수의 순서를 기반으로합니다.
Query query = JPA.em().createNativeQuery(
"SELECT COUNT(*) "+
"FROM truck AS t "+
"INNER JOIN box b "+
"WHERE t.truck_id = b.truck_id "+
"AND t.shipment_upc = ?"
);
query.setParameter(1, code);
.
메모
관찰 :
- 위치 표시 매개 변수는 1 인덱싱됩니다.
-
Query
매개 변수 맵의 키는 단순히 위치 매개 변수의 인덱스입니다.
추가 소스
제휴하지 않습니다 StackOverflow