gpt4 book ai didi

java - oneToMany 关系中的 HQL 查询

转载 作者:行者123 更新时间:2023-12-02 09:33:34 24 4
gpt4 key购买 nike

我们有两个实体,PersonHouse .

一个Person可以有很多House .

我正在尝试编写一个 HQL 查询来获取 Person 的列表按 House 列表的大小排序,有一个条件,即 House 的值应大于400 .

我的类(class)人物

@Entity
public class Person{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;

@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, mappedBy =
"person", fetch = FetchType.LAZY)
private List<House> houses = new ArrayList<>();

/**
* utility method to adjust relation
* @param house
*/
public void addHouse( House house ) {
this.houses.add(house);
house.setPerson(this);
}
//constructors, getters and setter omitted..
}

我的类(class)宿舍

@Entity
public class House {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private Integer value;

@ManyToOne
@JoinColumn(name = "person_id")
private Person person;

//constructors, getters and setters omitted..
}

我的表在数据库层上的表示

Person                     House
id name id value person_id
1 George 1 500 1
2 Frederic 2 250 2
3 Jamal 3 500 3
4 600 3

我的查询结果应该是[Jamal,George],并且 Frederic 不应该包含在内,因为他唯一拥有的房子没有值 >400 .

我的查询

public interface PersonRepository  extends JpaRepository<Person, Long> {

@Query(value = "select p from Person p order by p.houses.size desc ")
List<Person> getPersonWithMaxHouse();
}

这样,我就得到了根据房屋数量排序的人员列表。我如何添加 House 值的条件.

我的第二个问题是关于与我正在寻找的 hql 等效的 Sprig Data JPA 查询?

例如,此存储库查询返回姓名等于给定字符串的所有人员:List<Person> findAllByName(String Name);

最佳答案

我觉得应该是

public interface PersonRepository  extends JpaRepository<Person, Long> {

@Query(value = "select distinct p from Person p join p.houses h where h.value > 400 order by p.houses.size desc ")
List<Person> getPersonWithMaxHouse();
}

关于java - oneToMany 关系中的 HQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57746911/

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