Я не уверен, как сообщить JPA (не) использовать подготовленное заявление.
Вы не можете. Это зависит от поставщика, которого вы используете, и если/как он предоставляет такую конфигурацию.
Является ли JPA автоматически использующим подготовленные данные для этого?
Любой достойный поставщик будет использовать подготовленные данные.
Что относительно критериев API. Я предполагаю, что он использует динамический sql?
То же, что и выше. В примере, Hibernate использует подготовленный statments даже с носителями запросов:
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)
Где ваши доказательства, что провайдер не использует PreparedStatement? –
У меня нет никаких доказательств. Я задаю этот вопрос, чтобы убедиться, что он использует подготовленные операторы для сложных, повторяющихся запросов. – BetaRide
, так как ваш поставщик JPA является открытым исходным кодом, вы можете проверить кодовую базу на «make sure». Одно из (многих) преимуществ использования открытого источника. –