2

EclipseLink ライブラリを Eclipse で (開発時に) 使用しており、TopLink にデプロイしています。生成された SQL ステートメントを表示する必要があります。

次のpersistence.xmlを使用しています:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="myPUnit" transaction-type="JTA">
        <provider>
            oracle.toplink.essentials.PersistenceProvider
        </provider>
        <jta-data-source>jdbc/dcds</jta-data-source>
        <properties>
            <property name="toplink.cache.shared.default" value="false"/>
            <property name="toplink.logging.level" value="FINE" />
        </properties>
    </persistence-unit>
</persistence>

生成された sql ステートメントを表示する必要があることはわかっていますが、そうではありません。

4

2 に答える 2

2

JPA クエリの SQL を表示するには、FINE 以下のログを有効にします。

実行時に特定のクエリの SQL を取得するには、DatabaseQuery API を使用できます。

Session session = em.unwrap(JpaEntityManager).getActiveSession(); 
DatabaseQuery    databaseQuery = ((EJBQueryImpl)query).getDatabaseQuery(); 
databaseQuery.prepareCall(session, new DatabaseRecord()); 
String sqlString = databaseQuery.getSQLString();

この SQL には ? が含まれます。パラメータ用。引数を使用して SQL を変換するには、パラメーター値を含む DatabaseRecord が必要です。

Session session = em.unwrap(JpaEntityManager).getActiveSession();
DatabaseQuery databaseQuery = ((EJBQueryImpl)query).getDatabaseQuery();
String sqlString = databaseQuery.getTranslatedSQLString(session, recordWithValues);

出典:クエリの SQL を取得する方法

于 2012-08-24T06:16:57.433 に答える
1

回避策として、生成された SQL を app_serv_home\j2ee\home\log\oc4j\log.xml で見つけて ください。 on-oas.html

于 2010-12-10T23:25:43.780 に答える