代码之家  ›  专栏  ›  技术社区  ›  bobK

删除带有JPA和子查询的条目

  •  0
  • bobK  · 技术社区  · 12 年前

    我刚刚编写了一个sql查询:

    DELETE FROM basisgegevens.gm_persoonburgstaat pbs 
    WHERE (pbs.ingangsdatum, pbs.id_persoon) in (
      SELECT pbs2.ingangsdatum, pbs2.id_persoon 
      FROM basisgegevens.gm_persoonburgstaat pbs2 
      WHERE pbs2.ingangsdatum = pbs.ingangsdatum 
      AND pbs2.id_persoon = :persoonID 
      AND pbs2.id_persoonburgerlijkestaat > pbs.id_persoonburgerlijkestaat);
    

    我需要将其重写为JPQL,但我一直在用子查询重新定义外部查询。

    public class PersoonBurgerlijkeStaatEntity {
    @Column(name = "id_persoonburgerlijkestaat"
    private Long identifier;
    private Date ingangsdatum;
    @ManyToOne
    @JoinColumn(name = "id_persoon", referencedColumnName = "id_persoon", nullable = false)
    private PersoonEntity persoon;
    

    }

    persoon实体具有标识符

    有人能帮我重写一下吗?

    谢谢

    1 回复  |  直到 12 年前
        1
  •  1
  •   Koitoer    12 年前

    对此不确定,但试试看。

    DELETE FROM persoonburgstaat person where (person.ingangsdatum, person identifier) in 
        (select p.ingangsdatum, p.identifier from persoonburgstaat p
            left join p.persoon per where per.id_persoon = :persoonID 
            AND per.id_persoonburgerlijkestaa > p.identifier)
    

    左联接将进行外部查询

    但更确切地说,post-PersoonEntity实体,我认为“id_persoonburgerlijesta”是列的名称,而不是属性,因此查询将失败。