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

jav*_*ats 33 orm jpa eclipselink

我希望在开发期间将EclipseLink生成的SQL输出到控制台.但是,我只能使用日志级别FINE来执行此操作.我有一个由许多类组成的复杂域模型,因为EclipseLink输出其对整个模型的分析,因此当日志详细程度在FINE级别时,部署需要相当多的时间.

有没有办法获得SQL而不诉诸日志级别FINE(像Hibernate一样)?

jba*_*ndi 58

将以下属性放在您的persistence.xml:

 <property name="eclipselink.logging.level.sql" value="FINE"/>
 <property name="eclipselink.logging.parameters" value="true"/>
Run Code Online (Sandbox Code Playgroud)

后者很有用,因此显示了参数的值.

另一种方法是使用log4jdbclog4jdbc-remix.

  • 有没有办法通过Spring的`application.properties`文件来做到这一点? (3认同)

Von*_*onC 22

根据这个帖子,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" />
Run Code Online (Sandbox Code Playgroud)

但可能需要一些其他设置.

正如下面的Martin文档所述," EclipseLink/Examples/JPA/Logging "记录了这些属性.

  • 是的,它有效.非常感谢!现在的新问题是 - 为什么不在某处记录?如果是的话,为什么这不容易找到?;) (2认同)

Tom*_*asz 11

要在运行时获取特定Query的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();
Run Code Online (Sandbox Code Playgroud)

这个SQL会包含什么?用于参数.要使用参数转换SQL,您需要具有参数值的DatabaseRecord.

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

String sqlStringWithArgs = 
         databaseQuery.getTranslatedSQLString(session, recordWithValues);
Run Code Online (Sandbox Code Playgroud)

来源:如何获取查询的SQL

  • 很有用。设置 eclipse 链接来记录所有内容是一个巨大的垃圾邮件。这可以很容易地放入实用程序类中,并精确地用于仅在感兴趣的地方记录 SQL。例如,试图找到合适的 SQL 索引来创建,而没有其他地方。谢谢。 (2认同)