2017-01-25 1 views
0

Difference between Statement and PreparedStatement에 설명 된대로 동적 SQL보다 준비된 구문의 이점을 이해합니다.JPA에 준비된 명령문 (또는 동적 SQL)을 사용하도록 지시하려면 어떻게해야합니까?

그러나 JPA에 준비된 명령문을 사용하는 방법을 알리지는 않습니다.

이름이 지정된 쿼리가 여러 개 있습니다. JPA는 이것을 위해 준비된 통계를 자동으로 사용합니까? 기준 API는 어떻습니까? 내 생각 엔 동적 SQL을 사용하고 있는가?

+0

어디 공급자가 된 PreparedStatement를 사용하지 않는 것이 당신의 증거가 무엇입니까? –

+0

나는 전혀 증거가 없다. 이 질문을 통해 복잡하고 반복되는 쿼리에 대해 준비된 문을 사용하는지 확인합니다. – BetaRide

+0

JPA 제공자가 오픈 소스이기 때문에 "확실하게"코드베이스를 확인할 수 있습니다. 오픈 소스 사용의 (많은) 장점 중 하나. –

답변

1

나는 기본 JPA 제공자/구현에 의해 사용되는 일반적으로 준비된 문에서 미셸에 동의. 표준 JPA 여기에 내 대답을 참조하십시오 사용하여 문이 준비되고 결과는 (당신이 원하는해야합니다) 캐시되는 것을 보장하기 위해 :

How to use PreparedStatement efficiently?

+0

불행히도, ** 사실이 아닙니다 **. JSR-338 (JPA 2.1)의 어디에도 이름이 있든 없든 질의 나 결과의 * 준비 * 또는 * 캐싱 *에 대한 언급이 없습니다. 그것은 일반적으로 * 최선을 다하는 공급자에 달려 있습니다. –

2

JPA에 준비된 문을 사용하는 방법을 알리는 방법을 모르겠습니다.

수 없습니다. 사용하는 공급자 및 이러한 구성을 제공하는 방법/방법에 따라 다릅니다.

JPA는 자동으로 준비된 통계를 사용합니까?

괜찮은 제공자는 준비된 통계를 사용합니다.

기준 API는 무엇인가요? 내 생각 엔 동적 SQL을 사용하고 있는가?

위와 동일합니다. 예에서, 최대 절전 모드도 기본 쿼리 준비가 문에서도를 사용

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113) 
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2275) 
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186) 
at org.hibernate.loader.Loader.getResultSet(Loader.java:1787) 
at org.hibernate.loader.Loader.doQuery(Loader.java:674) 
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) 
at org.hibernate.loader.Loader.doList(Loader.java:2220) 

(credit OO7)

관련 문제