我如何告诉JPA使用准备好的语句(或动态sql)?
如中所述,我确实了解准备状态相对于动态sql的优势 然而,我不知道如何告诉JPA不要使用事先准备好的声明 我有许多命名查询。JPA是否自动为此使用准备好的声明?标准API呢。我猜它使用的是动态sql 我不知道如何告诉JPA不要使用事先准备好的声明 你不能。这取决于您使用的提供程序以及它是否/如何公开此类配置 JPA是否自动为此使用准备好的声明 任何体面的供应商都将使用准备好的文件 标准API呢。我猜它使用的是动态sql 同上。在本例中,Hibernate即使在本机查询中也使用准备好的语句:我如何告诉JPA使用准备好的语句(或动态sql)?,jpa,jdbc,openjpa,Jpa,Jdbc,Openjpa,如中所述,我确实了解准备状态相对于动态sql的优势 然而,我不知道如何告诉JPA不要使用事先准备好的声明 我有许多命名查询。JPA是否自动为此使用准备好的声明?标准API呢。我猜它使用的是动态sql 我不知道如何告诉JPA不要使用事先准备好的声明 你不能。这取决于您使用的提供程序以及它是否/如何公开此类配置 JPA是否自动为此使用准备好的声明 任何体面的供应商都将使用准备好的文件 标准API呢。我猜它使用的是动态sql 同上。在本例中,Hibernate即使在本机查询中也使用准备好的语句: at
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)
()
我不知道如何告诉JPA不要使用事先准备好的声明
你不能。这取决于您使用的提供程序以及它是否/如何公开此类配置
JPA是否自动为此使用准备好的声明
任何体面的供应商都将使用准备好的文件
标准API呢。我猜它使用的是动态sql
同上。在本例中,Hibernate即使在本机查询中也使用准备好的语句:
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)
()我同意Michele的观点,即基本的JPA提供者/实现者使用一般准备好的语句。为了确保使用标准JPA准备您的陈述并缓存结果(如果您希望这样做),请参见我的回复:
我同意Michele的观点,即基本JPA提供者/实现者使用一般准备好的语句。为了确保使用标准JPA准备您的陈述并缓存结果(如果您希望这样做),请参见我的回复:
你的证据在哪里,证明提供者没有使用准备好的声明?我根本没有证据。我问这个问题是为了确保它使用准备好的语句来进行复杂、重复的查询。因为您的JPA提供者是开源的,所以您可以检查代码库以“确保”。使用开源的(许多)优点之一。你有何证据表明提供商没有使用预处理声明?我根本没有证据。我问这个问题是为了确保它使用准备好的语句来进行复杂、重复的查询。因为您的JPA提供者是开源的,所以您可以检查代码库以“确保”。使用开源的(许多)优点之一。不幸的是,事实并非如此。JSR-338(JPA2.1)中没有任何关于查询或结果(无论是否命名)的准备或缓存的内容。这一切都取决于提供商,提供商通常会尽最大努力。不幸的是,事实并非如此。JSR-338(JPA2.1)中没有任何关于查询或结果(无论是否命名)的准备或缓存的内容。这一切都取决于提供商,提供商通常会尽最大努力。