Hi, I have two objects
Objects: Objeto, Comunicado and ComunicadoTramite
Code:
@Entity
@Table(name = "objetos")
@Inheritance(strategy = InheritanceType.JOINED)
public class Objeto extends Fact {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_objeto", unique = true, nullable = false)
private Integer id;
@NotNull
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "dt_criacao")
private Date dataCriacao;
}
@Entity
@Table(name = "comunicados")
@PrimaryKeyJoinColumn(name = "cd_comunicado")
public class Comunicado extends Objeto {
@OneToMany(mappedBy = "comunicado")
private List<ComunicadoTramite> tramites;
}
@Entity
@Table(name = "comunicados_tramites")
@PrimaryKeyJoinColumn(name = "cd_tramite")
public class ComunicadoTramite extends Objeto {
@NotNull
@ManyToOne
@JoinColumn(name = "cd_comunicado")
private Comunicado comunicado;
The problem is, i want a list of Comunicado that is ordered by dataCriacao, the two objects (Comunicado and ComunicadoTramite) extends Objeto that contains dataCriacao.
if Comunicado.tramites.size() > 0 then get dataCriacao from the last ComunicadoTramite inserted
if Comunicado.tramites.size() = 0 then get dataCriacao from Comunicado.
In native SQL I did this
Code:
SELECT c.cd_comunicado, tb_tram.dt_criacao FROM comunicados AS c
INNER JOIN (
SELECT ct.cd_comunicado, MAX(obj.dt_criacao) AS dt_criacao FROM comunicados_tramites AS ct, objetos obj
WHERE ct.cd_tramite = obj.id_objeto GROUP BY ct.cd_comunicado
) AS tb_tram
ON c.cd_comunicado = tb_tram.cd_comunicado
)
UNION
(SELECT c.cd_comunicado, obj.dt_criacao FROM comunicados c, objetos obj
WHERE c.cd_comunicado = obj.id_objeto
AND c.cd_comunicado NOT IN (SELECT tram.cd_comunicado FROM comunicados_tramites tram))
ORDER BY dt_criacao DESC
I dont know how to do it in JPA... can anyone help me?