gpt4 book ai didi

java - 在 Mysql/Hibernate 中获取子实体

转载 作者:行者123 更新时间:2023-11-29 02:50:46 28 4
gpt4 key购买 nike

我使用 JPA 作为持久化引擎来处理数据库查询。表(MySQL)如下:

Parent - table
+-----+---------+
|id | name |
+-----+---------+
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
+---------------+

child1 - table
+--+---------+------+
|id|parent_id|name |
+--+---------+------+
| 1| 1 | qwe |
| 2| 1 | asd |
| 3| 1 | dsf |
| 4| 2 | xzc |
+--+---------+------+

child2 - table
+--+---------+------+------+
|id|parent_id|type |name |
+--+---------+------+------+
| 1| 1 | 1 | qqq |
| 2| 1 | 1 | www |
| 3| 1 | 1 | eee |
| 4| 1 | 2 | aaa |
| 5| 1 | 2 | sss |
| 6| 1 | 2 | ddd |
| 7| 1 | 3 | zzz |
| 8| 2 | 1 | xxx |
+--+---------+------+------+

我的类(class)是

@Entity
@Table(name = "parent")
public class Parent{
@Id
@GeneratedValue(strategy = IDENTITY)
private int id;

@Column(name = "name")
private String name;

@OneToMany(fetch = FetchType.EAGER, mappedBy = "parent")
private List<Child1> children1;

@OneToMany(fetch = FetchType.EAGER, mappedBy = "parent")
private List<Child2> children2;

}

@Entity
@Table(name = "child1")
public class Child1{
@Id
@GeneratedValue(strategy = IDENTITY)
private int id;

@Column(name = "name")
private String name;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id", nullable = false)
private Parent parent;

}

@Entity
@Table(name = "child2")
public class Child2{
@Id
@GeneratedValue(strategy = IDENTITY)
private int id;

@Column(name = "name")
private String name;

@Column(name = "type")
private int type;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id", nullable = false)
private Parent parent;

}

我想通过以下方式获取父实体和子实体(将它们自己的 List 对象嵌入到 Parent java 对象中)。我只想为每个 parent 获取具有 ma​​ximum id 的 child1 实体。

(对于给定的示例,parent(id:1) 为 child1(id:3),parent(id:2) 为 child1(id:4))。

我还想为每个 type 的 child2 获取具有 ma​​ximum id 的 child2。

(对于给定的示例,child2(id:3)(最大类型:1),child2(id:6)(最大类型:2),child2(id:7)(最大类型:3)对于父(id:1)和子 2(id:8)(最大类型:1)对于父(id:2))

最后,Parent(id:1) 在 List children1 中有一个 Child1(id:3),在 List children2 中有三个 Child2(id:3, id:6, id:7)。

抱歉我的英语不好。

感谢您的帮助。

最佳答案

你真的应该发布你到目前为止尝试过的东西,但由于我还不能 Comment Everywhere™,我会帮助你完成第一个,你可以自己尝试第二个。

我假设您要求 HQL 执行您的查询。试试这个:

select max(c.id), c.parent.id from Child1 c group by child1.parent.id

你想要的第二个查询非常相似,如果你能让那个查询工作那么它应该很容易。

关于java - 在 Mysql/Hibernate 中获取子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36197947/

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