JPQL convertisseur SQL
Question
Est-il possible d'accéder au SQL généré par JPQL?
Je voudrais utiliser SQL pour ensuite créer une vue pour mes besoins.
J'utilise Hibernate si elle compte.
La solution
Alors vous devez écrire votre propre implémentation de JPQL alors :-) Après tout, la conversion JPQL en SQL pour un datastore SGBDR est ce que une implémentation JPQL est. Bonne chance!
Bien sûr, vous pouvez utiliser une implémentation existante JPQL bien, que ce soit Hibernate, ou EclipseLink, ou DataNucleus ... et comme ils sont tous open source vous devriez aller et creuser dans leur base de code.
Autres conseils
Est-il possible d'accéder au SQL généré par JPQL?
Vous pouvez accéder à la String
SQL à partir d'un Mise en veille prolongée Interceptor
, plus précisément de la méthode Interceptor.html#onPrepareStatement(java.lang.String)
onPrepareStatement
String onPrepareStatement(String sql) Called when sql string is being prepared. Parameters: sql - sql to be prepared Returns: original or modified sql
Si vous décidez d'aller dans cette voie, la meilleure option est de s'étend EmptyInterceptor
et pour remplacer uniquement les méthodes que vous voulez.
Vous pouvez brancher votre intercepteur en utilisant la déclaration suivante dans votre persistence.xml
:
<properties>
<property name="hibernate.ejb.interceptor" value="com.acme.MyInterceptor"/>
</properties>
Vous pouvez définir la propriété hibernate.show_sql
true, tout le SQL sera affiché sur la console.
<property name="hibernate.show_sql">true</property>