DELETE estranho em JPA

0 respostas
V

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 ?

Criado 22 de junho de 2009
Respostas 0
Participantes 1