gpt4 book ai didi

java - 在 JPA 中加入具有空值的列

转载 作者:行者123 更新时间:2023-11-30 10:21:36 25 4
gpt4 key购买 nike

我有一个实体如下:

public class User {

@Id
@Column
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idgenx_gx")
private Long id;

@Column
private String name;

@Column
private String lastname;

@ManyToOne(fetch = FetchType.LAZY, optional = true)
private Country country;

@ManyToOne(fetch = FetchType.LAZY, optional = false)
private Organization organization;

}

它是 dto:

public class UserDTO {

private Long id;
private String name;
private String lastname;
private String organizationName;
private Country country;

}

使用 JPA Criteria API 我想从数据库中选择所有用户,所以我做了如下操作:

final CriteriaBuilder builder = getCriteriaBuilder();
final CriteriaQuery<UserDTO> query = builder.createQuery(UserDTO.class);
final Root<User> from = query.from(User.class);
Join<User, Organization> joinOrg = from.join(User_.organization, JoinType.LEFT);
query.multiselect(from.get(User_.id), from.get(User_.name), from.get(User_.lastname),
joinOrg.get(Organization_.name), from.get(User_.country));
query.distinct(true);

return getEntityManager().createQuery(query).getResultList();

这个问题是它将只返回国家不为空的用户,因为生成的查询包含这个:inner join Country on User.country=Country.id必须保留 join 代替。

我该如何解决这个问题?

最佳答案

您也可以尝试通过添加连接来强制 JoinType.LEFT,例如:

Join<User, Country> joinCountry = from.join("country", JoinType.LEFT);   
query.multiselect(from.get("id"), from.get("name"), from.get("lastname")
,joinOrg.get("name"), joinCountry );

无论如何,这个问题可能出在其他地方,因为我无法在我的环境中重现它。

关于java - 在 JPA 中加入具有空值的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47778118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com