JPA @OneToOne n + 1查询

时间:2020-07-01 09:57:01

标签: hibernate jpa one-to-one

有些实体具有@OneToOne关系。

class Region {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private long pk;

  @OneToOne
  @JoinColumn(name = "polygon_pk")
  private Polygon polygon;
}

class Polygon {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private long pk;
  
  @OneToOne(mappedBy = "polygon", fetch = FetchType.LAZY)
  private Region region;
}

当我选择Region实体时,我预期会在下面。

SELECT *
FROM region r
LEFT JOIN polygon p
on r.polygon_pk = p.pk

但是实际查询在下面

SELECT *
FROM region r;

SELECT * 
FROM polygon p
WHERE p.pk in (?, ?, ?, ?, ...);

-- The query below occurs in the total number.
SELECT *
FROM region r
LEFT JOIN polygon p
on r.polygon_pk = p.pk
where r.pk = ?;

SELECT *
FROM region r
LEFT JOIN polygon p
on r.polygon_pk = p.pk
where r.pk = ?;

SELECT *
FROM region r
LEFT JOIN polygon p
on r.polygon_pk = p.pk
where r.pk = ?;

SELECT *
FROM region r
LEFT JOIN polygon p
on r.polygon_pk = p.pk
where r.pk = ?;

...

我们目前无法删除@OneToOne上的Polygon关系。
那么,我做错了什么事?

0 个答案:

没有答案
相关问题