OneToOne 与 OUTER JOIN

问题描述 投票:0回答:0

我有一个实体:

public class Bird {
@Id
@GeneratedValue(strategy = IDENTITY)
private Long id;
@OneToOne(optional = true)
@Fetch(FetchMode.JOIN)
@JoinColumn(name = "current_transmitter_id", nullable = true)
private Transmitter currentTransmitter;
....
}

并非每只鸟都有一个相关的

CurrentTransmitter

我的 DTO 投影查询是:

@Query("SELECT NEW com.contoso.view.BirdSummaryDTO(b.name, b.sex, b.currentTransmitter ) FROM Bird b")
List<BirdSummaryDTO> listBirdDTO();

BirdSummaryDTO 看起来像:

public class BirdSummaryDTO {

final String name;
final String sex;
final Transmitter currentTransmitter;

public BirdSummaryDTO(Integer id, Transmitter currentTransmitter) {
    this.name = name;
    this.sex = sex;
    this.currentTransmitter = currentTransmitter;
}

但是我的查询仅返回具有发射器的鸟类。它使用 INNER JOIN。类似的问题here,但添加 FetchMode.JOIN 并未将查询更改为 OUTER JOIN。

问:有没有注释或方法可以让它返回所有鸟类,无论它们是否有当前的发射器?

spring hibernate jpql
© www.soinside.com 2019 - 2024. All rights reserved.