Bom pessoal, estou com um problema que só vejo como resolver na base da gambiarra… mas vamos ver se tem alguma solução melhor…
Tenho as seguintes classes:
PRIndicador
@Entity
@Table(name="pr_indicador")
@SequenceGenerator(name = "seqPRIndicador", sequenceName = "seqPRIndicador", allocationSize = 1)
public class PRIndicador implements Serializable {
@Id
@GeneratedValue(generator = "seqPRIndicador", strategy = GenerationType.SEQUENCE)
@Column(name="codprindicador")
private Integer codprindicador;
@Column(name="nome", length=50, nullable=false)
private String nome;
@Column(name="producao", nullable=false)
private Boolean producao;
}
PRApuracaoEventoMedia
@Entity
@Table(name="pr_apuracaoeventomedia")
public class PRApuracaoEventoMedia implements Serializable {
@EmbeddedId
private PRApuracaoEventoMediaPK id;
@Column(name="media")
private Double media;
@Column(name="desviopadrao")
private Double desvioPadrao;
@ManyToOne
@JoinColumn(name="codprindicador", referencedColumnName="codprindicador", insertable=false, updatable=false)
private PRIndicador indicador;
}
PRApuracaoEventoMediaPK
@Embeddable
public class PRApuracaoEventoMediaPK implements Serializable {
@Column(name="codprindicador")
private Integer codprindicador;
@Column(name="codprevento")
private Integer codprevento;
@Column(name="codprgrupomonitoramento")
private Integer codprgrupomonitoramento;
@Column(name="anomes")
private Integer anoMes;
}
está acontecendo o seguinte, se eu faço um JPQL:
SELECT i.codprindicador FROM PRIndicador i WHERE i.producao = true
no log, gera um SQL assim:
SELECT codprindicador FROM pr_indicador WHERE producao = true
porém, quando eu faço o seguinte delete:
DELETE FROM PRApuracaoEventoMedia m WHERE m.id.codprindicador IN (SELECT i.codprindicador FROM PRIndicador i WHERE i.producao = false)
gera um SQL assim:
DELETE FROM pr_apuracaoeventomedia WHERE
EXISTS(SELECT t0.anomes FROM pr_apuracaoeventomedia t0 WHERE
(t0.codprindicador IN (
SELECT t1.codprindicador
FROM pr_indicador t2, pr_indicador t1
WHERE (t2.producao = true))) AND
t0.anomes = pr_apuracaoeventomedia.anomes AND
t0.codprgrupomonitoramento = pr_apuracaoeventomedia.codprgrupomonitoramento AND
t0.codprindicador = pr_apuracaoeventomedia.codprindicador AND
t0.codprevento = pr_apuracaoeventomedia.codprevento)
o erro está aqui:
SELECT t1.codprindicador
FROM pr_indicador t2, pr_indicador t1
WHERE (t2.producao = true)
ele faz o SELECT para verificar os indicadores que tem produção = true, mas coloca a tabela pr_indicador 2vezes o FROM e coloca 1 no select e a outra no WHERE
achei estranho pois no JPQL, esse pedaço do DELETE é idêntico ao SELECT colocado acima e ainda assim traz esses valores diferentes…
Alguém tem alguma solução ?