Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何告诉JPA使用准备好的语句(或动态sql)?_Jpa_Jdbc_Openjpa - Fatal编程技术网

我如何告诉JPA使用准备好的语句(或动态sql)?

我如何告诉JPA使用准备好的语句(或动态sql)?,jpa,jdbc,openjpa,Jpa,Jdbc,Openjpa,如中所述,我确实了解准备状态相对于动态sql的优势 然而,我不知道如何告诉JPA不要使用事先准备好的声明 我有许多命名查询。JPA是否自动为此使用准备好的声明?标准API呢。我猜它使用的是动态sql 我不知道如何告诉JPA不要使用事先准备好的声明 你不能。这取决于您使用的提供程序以及它是否/如何公开此类配置 JPA是否自动为此使用准备好的声明 任何体面的供应商都将使用准备好的文件 标准API呢。我猜它使用的是动态sql 同上。在本例中,Hibernate即使在本机查询中也使用准备好的语句: at

如中所述,我确实了解准备状态相对于动态sql的优势

然而,我不知道如何告诉JPA不要使用事先准备好的声明

我有许多命名查询。JPA是否自动为此使用准备好的声明?标准API呢。我猜它使用的是动态sql

我不知道如何告诉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)
()

我不知道如何告诉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)中没有任何关于查询或结果(无论是否命名)的准备或缓存的内容。这一切都取决于提供商,提供商通常会尽最大努力。