Is it possible to output generated SQL using EclipseLink without having to increase log verbosity?

前端 未结 3 799
迷失自我
迷失自我 2020-12-02 13:36

I want to output the SQL generated by EclipseLink to the console, during development. However, I could only do so using the logging level FINE. I have a complex domain model

相关标签:
3条回答
  • 2020-12-02 13:47

    The log generation for EclipseLink seems quite difficult to set, according to this thread.

    It mentions a persistence.xml file with log level you can adapt:

    <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" />
    

    But some other settings may be needed.

    As Martin documents below, "EclipseLink/Examples/JPA/Logging" documents those properties.

    0 讨论(0)
  • 2020-12-02 13:58

    Put the following properties in your persistence.xml:

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

    The latter is helpful, so that the values of the parameter are shown.

    An alternative is using log4jdbc or log4jdbc-remix.

    0 讨论(0)
  • 2020-12-02 14:04

    To get the SQL for a specific Query at runtime you can use the 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();
    

    This SQL will contain ? for parameters. To get the SQL translated with the arguments you need a DatabaseRecord with the parameter values.

    DatabaseRecord recordWithValues= new DatabaseRecord();
    recordWithValues.add(new DatabaseField("param1"), "someValue");
    
    String sqlStringWithArgs = 
             databaseQuery.getTranslatedSQLString(session, recordWithValues);
    

    Source: How to get the SQL for a Query

    0 讨论(0)
提交回复
热议问题