2

hibernateメソッドのJavaコード内にshow_sqlhibernateパラメーターを設定して、その特定のメソッドの実際のSQLクエリのみを出力できるようにします。

私は以下の構成を使用してそれを行うことができることを知っています

<property name="show_sql">true</property>

ただし、すべての休止状態の呼び出しに対してすべてのSQLが出力されます。いくつかの方法に固有にしたい例。

public List<Customer> getAllCustomerListByActive(boolean isActive) {
        List<Customer> customerList = new ArrayList<Customer>();
        Criteria criteria = getSession().createCriteria(Customer.class);
        criteria.add(Restrictions.eq("isActive", isActive));
        criteria.add(Restrictions.eq("delFlag", false));
        criteria.addOrder(Order.asc("id"));
        customerList = criteria.list();        
        **//Print SQL Method Syntax will come here**
        return customerList;
    }
4

4 に答える 4

3

以下のコードで SQL のロギングを有効または無効にできます。

Logger sqlLogger = Logger.getLogger("org.hibernate.SQL");
sqlLogger.setLevel(Level.DEBUG);

... do your stuff ...

sqlLogger.setLevel(Level.OFF);
于 2012-07-24T10:08:39.977 に答える
1

@Vashは上記のリンクを提供しており、さまざまなアプローチについて詳しく説明しています。

しかし、この質問を参照するために、そして私が私のコードで使用したものは以下のとおりです

try {
            CriteriaImpl c = (CriteriaImpl) criteria;
            SessionImpl s = (SessionImpl) c.getSession();
            SessionFactoryImplementor factory = (SessionFactoryImplementor) s.getSessionFactory();
            String[] implementors = factory.getImplementors(c.getEntityOrClassName());
            CriteriaLoader loader = new CriteriaLoader((OuterJoinLoadable) factory.getEntityPersister(implementors[0]),
                    factory, c, implementors[0], s.getEnabledFilters());
            Field f = OuterJoinLoader.class.getDeclaredField("sql");
            f.setAccessible(true);
            String sql = (String) f.get(loader);
        } catch (Exception e) {
        }

本番環境で使用するのは非常に危険です。

于 2012-07-24T09:46:57.597 に答える
0

これを行う1つの方法は、他のすべてのパッケージ/クラスのログレベルをより高いレベルに変更し、このクラス/パッケージのログをデバッグレベルに維持することです。

log4jプロパティの設定方法を確認してください。私はそれをする他の方法があるに違いないと確信しています。

于 2012-07-24T09:41:24.517 に答える
0

これは、休止状態のプロパティまたは標準の休止状態/slf4j API 呼び出しを使用して行うことはできません。

不要な出力を除外する独自のカスタム Logger を作成してみてください。

于 2012-07-24T09:55:52.827 に答える