Vous pouvez mettre les requêtes en package-info.java
classe, dans, disons, racine package de vos objets de domaine. Cependant, vous devez utiliser les annotations @NamedQueries
et @NamedQuery
d'Hibernate, plutôt que celles de javax.persistence
.
Exemple de fichier package-info.java
:
@org.hibernate.annotations.NamedQueries({
@org.hibernate.annotations.NamedQuery(
name = "foo.findAllUsers",
query="from Users")
})
package com.foo.domain;
, vous devez alors ajouter le package à votre AnnotationConfiguration
. J'utilise Spring, donc là, il est question de la mise en annonatedPackages
propriété:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="annotatedClasses">
<list>
...
</list>
</property>
<property name="annotatedPackages">
<list>
<value>com.foo.domain</value>
</list>
</property>
Vous pouvez aussi mettre des définitions de type et de filtrage dans le même fichier ainsi.
De mon point de vue, ce n'est pas une externalisation de requêtes - c'est compilé en classe et pour moi d'avoir des dizaines de requêtes dans la classe entité ou encore plus de requêtes dans la classe package-info je vais choisir entity. Je ne sais pas pourquoi c'est accepté -> -1 – Betlista
+1 Pour moi, c'est ok. Il montre comment externaliser en utilisant Java Config et XML. Lire la question avant downvoting, il indique clairement qu'il ne veut pas avoir les NamedQueries à l'intérieur de la classe. – Augusto