Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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 是否可以使用EclipseLink输出生成的SQL,而不必增加日志的详细程度?_Jpa_Eclipselink_Orm - Fatal编程技术网

Jpa 是否可以使用EclipseLink输出生成的SQL,而不必增加日志的详细程度?

Jpa 是否可以使用EclipseLink输出生成的SQL,而不必增加日志的详细程度?,jpa,eclipselink,orm,Jpa,Eclipselink,Orm,我想在开发期间将EclipseLink生成的SQL输出到控制台。但是,我只能使用日志级别FINE来完成这项工作。我有一个由许多类组成的复杂域模型,当日志详细程度很好时,部署需要相当长的时间,因为EclipseLink会输出对整个模型的分析 有没有一种方法可以在不使用日志级别精细(如Hibernate)的情况下获取SQL?根据的说法,EclipseLink的日志生成似乎很难设置 它提到了一个persistence.xml文件,其日志级别可以调整: <property name="eclips

我想在开发期间将EclipseLink生成的SQL输出到控制台。但是,我只能使用日志级别FINE来完成这项工作。我有一个由许多类组成的复杂域模型,当日志详细程度很好时,部署需要相当长的时间,因为EclipseLink会输出对整个模型的分析


有没有一种方法可以在不使用日志级别精细(如Hibernate)的情况下获取SQL?

根据的说法,EclipseLink的日志生成似乎很难设置

它提到了一个
persistence.xml
文件,其日志级别可以调整:

<property name="eclipselink.weaving" value="static" />
<property name="eclipselink.logging.level.sql" value="FINEST" />
<property name="eclipselink.logging.level" value="FINEST" />
<property name="eclipselink.logging.level.cache" value="FINEST" />

但可能需要一些其他设置


作为文档,“文档”记录这些属性。

将以下属性放在
persistence.xml中:

 <property name="eclipselink.logging.level.sql" value="FINE"/>
 <property name="eclipselink.logging.parameters" value="true"/>

后者很有用,因此可以显示参数的值


另一种方法是使用或。

在运行时获取特定查询的SQL,您可以使用DatabaseQuery API

Query query = em.createNamedQuery("findMe"); 
Session session = em.unwrap(JpaEntityManager.class).getActiveSession(); 
DatabaseQuery databaseQuery = ((EJBQueryImpl)query).getDatabaseQuery(); 
databaseQuery.prepareCall(session, new DatabaseRecord());

String sqlString = databaseQuery.getSQLString();
此SQL将包含?有关参数。要使用参数转换SQL,需要一个带有参数值的DatabaseRecord

DatabaseRecord recordWithValues= new DatabaseRecord();
recordWithValues.add(new DatabaseField("param1"), "someValue");

String sqlStringWithArgs = 
         databaseQuery.getTranslatedSQLString(session, recordWithValues);

来源:

是的,它可以工作。谢谢!现在的新问题是——为什么它没有记录在某个地方?如果是,为什么不容易找到@javabeats文档可以在中找到(在那里搜索
EclipseLink日志时的第一个结果)。@Martin谢谢。“我在答案中加入了您的评论,以提高可视性。@马丁请记住,这个问题已有6年历史,不确定当时是否有记录……非常有用。”。将eclipse链接设置为记录所有内容是一个巨大的垃圾邮件。这可以很容易地放入实用程序类中,并且仅在感兴趣的地方精确地记录SQL。例如,在何处尝试查找要创建的适当SQL索引,而在其他任何地方都没有。谢谢.String sql=((EJBQueryImpl)查询).getDatabaseQuery().getTranslatedSQLString(entityManager.unwrap(JPAEEntityManager.class).getSession(),new DatabaseRecord());