2016-08-23 36 views
0

https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/Interceptor.html によると、onPrepareStatement(String sql)は非推奨です。 SQL文を検査して変更する場合は、代わりにStatementInspectorを指定します。HibernateでStatementInspectorをどのように設定できますか?

しかし、アプリケーションレベルでHibernateでどのようにStatementInspectorを構成できるかはっきりしていません(私は各ハイバネートセッションレベルでそれを設定したくありません)。

答えて

0

これを動作させるには、Hibernateをブートストラップする必要があります。これを行うには:

メインクラスで、EntityManagerFactoryインスタンスを探します。おそらく次のようになります。

public static final EntityManagerFactory EMPFAC = Persistence.createEntityManagerFactory("jpa") 

この行は今のところ残してください。その上、以下の追加:

private static StandardServiceRegistryBuilder servReg = new StandardServiceRegistryBuilder(); 
static { 
    //Do this for every property in persistence.xml 
    servReg.applySetting("hibernate.connection.url", "jdbc://myurl://www.example.org"); 
} 

persistence.xmlのすべてのプロパティのservReg.applySetting()を追加します。次に、その下にこれを追加します。

private static MetadataSources sources = new MetadataSources(servReg.build()); 
static { 
    // Do this for every pojo with JPA annotations 
    sources.addAnnotatedClass(Pojo.class); 
} 

は、アプリケーション内のすべてのJPA-注釈付きのPOJOのためsources.addAnnotatedClass()を追加します。ほとんどここでやった。今、そのようStatementInspectorを実装するクラスを作成します。

public class Inspector implements StatementInspector { 

    private static final long serialVersionUID = 5545844969759630544L; 

    @Override 
    public String inspect(String select) { 
     // modify string here 
     return select; 
    } 
} 

最後に、あなたがあなたのPOJOを登録し、静的なブロックの下に、以下を追加し、バックメインアプリケーションクラスに行く、と:

public static final SessionFactory EMPFAC = sources.buildMetadata().getSessionFactoryBuilder().applyStatementInspector(new Inspector()).build(); 

今度はpersistence.xmlに戻り、そこでプロパティ宣言を削除することができます。あなたがまだ持っていない場合は、public static final EntityManager宣言を削除してください(あなたはそれをSessionFactoryに置き換えました)。

編集:実際にはpersistence.xmlを削除することができ、アプリケーションは正常に動作するはずです。

すべてセット!

2

はそのようにしないでください)

あなたは2つだけ必要があります。

  1. をpersistence.xmlにプロパティを追加します。

プロパティ名= "hibernate.session_factory.statement_inspectorを" value = "完全修飾クラス名"

  1. インターフェイスを実装することでリスナークラスを記述します。 g.hibernate.resource.jdbc.spi.StatementInspector。

Profit!

関連する問題