【问题标题】:deleting entries with JPA and subqueries删除带有 JPA 和子查询的条目
【发布时间】:2014-03-14 15:58:00
【问题描述】:

我刚刚写了一个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;

}

人物实体有一个标识符

有人可以帮我重写吗?

谢谢

【问题讨论】:

  • 我假设 basicgegevens 是模式,而 basicgegevens 是表? persoonburgstaat 是实体 PersoonBurgerlijkeStaatEntity 的表?

标签: sql jpa criteria


【解决方案1】:

不确定,但请尝试一下。

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)

左连接将进行外部查询

但要更确定发布 PersoonEntity 实体,因为我认为“ id_persoonburgerlijkestaa ”是列的名称而不是属性,因此查询将失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多