我有一个实体:
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;
}
型
然而,我的查询只返回具有发射器的鸟类。它正在使用内部连接。
**Q:**是否有注解或方法使其返回所有鸟类,无论它们是否有电流发射器?
1条答案
按热度按时间ylamdve61#
为了解决这个问题,我不需要接触实体。HQL中的“隐式连接”,如B.currentTransmitter,总是内部连接。
将
DTO
- scope从final更改为private:字符串
然后,在存储库中的查询更改为LEFT JOIN(即OUTER):
型
注意在查询中,我必须显式地声明LEFT JOIN。这将左联接更改为左外联接。