문제

나는 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 매개 변수 맵의 키는 단순히 위치 매개 변수의 인덱스입니다.

추가 소스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top