Aquí hay un caso especial, pero podría inspirarlo a crear su propio trabajo. El objetivo aquí es contar el número total de registros de dos tablas diferentes donde los registros cumplen un criterio particular. Creo que esta técnica funcionará para cualquier caso en el que necesite agregar datos de múltiples tablas/fuentes.
Tengo algunas clases especiales de configuración intermedia, por lo que el código que llama a la consulta indicada es breve y dulce, pero puede usar cualquier método que utilice normalmente junto con consultas con nombre para ejecutar su consulta.
QueryParms parms=new QueryParms();
parms.put("PROCDATE",PROCDATE);
Long pixelAll = ((SourceCount)Fetch.row("PIXEL_ALL",parms,logger)).getCOUNT();
Como se puede ver aquí, la consulta con nombre comienza a parecer una gran cantidad horrible como una declaración de la Unión:
@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;
}
}
Parte de la magia aquí es crear una tabla ficticia e insertar un registro en eso. En mi caso, lo llamé dual1 porque mi base de datos es Oracle, pero no creo que importe lo que usted llama la tabla ficticia.
@Entity
@Table(name="DUAL1")
public class Dual1 {
@Id
Long ID;
}
No se olvide de insertar su registro ficticio:
SQL> insert into dual1 values (1);
Una de las soluciones es utilizar la entidad agregada, como se describe [aquí] (http://stackoverflow.com/questions/ 7322526/hibernate-jpa-es-es-posible-recuperar-entidades heterogéneas-en-una-que/7322738 # 7322738). –