gpt4 book ai didi

java - Jpa 按子属性搜索不会获取所有子属性

转载 作者:行者123 更新时间:2023-12-01 16:45:03 25 4
gpt4 key购买 nike

我需要在一个查询中按子 ID 查找所有父实体,但结果我需要拥有包含所有子实体的父实体。父级始终只有一个子级(具有搜索中的 id)的集合。条件应该是适用于搜索,但不适用于获取子项。是否可以在一个查询中完成此操作?请帮忙。

@Entity
@Table(name = "user_hub")
public class UserHub {

@Id
private Integer id;

private String name;

private String description;

@OneToMany(mappedBy = "hub", fetch = FetchType.LAZY)
private Set<UserHubMember> hubMembers= new HashSet<>();
}


@Entity
@Table(name = "user_hub_member")
public class UserHubMember implements Serializable {

private Integer id;

private string name;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "\"hubId\"", insertable = false, updatable = false)
private UserHub hub;

public UserHubMember () {
}
}

@Query("select uh from UserHub uh " +
"left join fetch uh.hubMembers hm" +
"where hm.id = :memberId"
)
List<UserHub> findAllByMemberId(Integer memberId);

最佳答案

如果我误解了你的问题,请纠正我,你想要 parent :(具有 id 等于特定 id 以及其他不满足条件的子实体的子实体)

 @Query("select uh from UserHub uh left join fetch uh.hubMembers hm where hm.id = :memberId")
List<UserHub> findAllByMemberId(Integer memberId);

在 JPA 方面使用 JOINJOIN FETCH 之间存在巨大差异。

您无法通过查询实现这一目标,因为您仅获取一个子实体,而无法通过显式指定join fetch来获取其他子实体

你应该这样做:

@Query("select uh from UserHub uh join uh.hubMembers hm where hm.id = :memberId")
List<UserHub> findAllByMemberId(Integer memberId);

这将使 parent 各自拥有符合您的平等标准的所有子实体

关于java - Jpa 按子属性搜索不会获取所有子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61798292/

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