Voici un cas particulier, mais qui pourrait vous inspirer pour créer votre propre travail. Le but ici est de compter le nombre total d'enregistrements de deux tables différentes où les enregistrements répondent à un critère particulier. Je crois que cette technique fonctionnera dans tous les cas où vous devez regrouper des données provenant de plusieurs tables/sources. J'ai une configuration de classes intermédiaires spéciales, donc le code qui appelle la requête nommée est court et doux, mais vous pouvez utiliser n'importe quelle méthode que vous utilisez normalement en conjonction avec des requêtes nommées pour exécuter votre requête.
QueryParms parms=new QueryParms();
parms.put("PROCDATE",PROCDATE);
Long pixelAll = ((SourceCount)Fetch.row("PIXEL_ALL",parms,logger)).getCOUNT();
Comme vous pouvez le voir ici, la requête nommée commence à regarder un lot aweful comme une déclaration syndicale:
@Entity
@NamedQueries({
@NamedQuery(
name ="PIXEL_ALL",
query = "" +
" SELECT new SourceCount(" +
" (select count(a) from PIXEL_LOG_CURR1 a " +
" where to_char(a.TIMESTAMP, 'YYYYMMDD') = :PROCDATE " +
" )," +
" (select count(b) from PIXEL_LOG_CURR2 b" +
" where to_char(b.TIMESTAMP, 'YYYYMMDD') = :PROCDATE " +
" )" +
") from Dual1" +
""
)
})
public class SourceCount {
@Id
private Long COUNT;
public SourceCount(Long COUNT1, Long COUNT2) {
this.COUNT = COUNT1+COUNT2;
}
public Long getCOUNT() {
return COUNT;
}
public void setCOUNT(Long COUNT) {
this.COUNT = COUNT;
}
}
Une partie de la magie est ici de créer une table factice et insérez un enregistrement dans il. Dans mon cas, je l'ai appelé dual1 parce que ma base de données est Oracle, mais je ne pense pas que ce soit ce que vous appelez la table fictive.
@Entity
@Table(name="DUAL1")
public class Dual1 {
@Id
Long ID;
}
Ne pas oublier d'insérer votre dossier factice:
SQL> insert into dual1 values (1);
L'une des solutions est d'utiliser l'entité globale, comme décrit [ici] (http://stackoverflow.com/questions/ 7322526/hibernate-jpa-is-it-possible-de-retrieve-heterogene-entities-in-a-single-que/7322738 # 7322738). –