我使用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 |
+--+---------+------+------+
我的班级是
@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;
}
我想以下列方式获取父母和子实体(在父 java对象中嵌入自己的列表对象)。我只想让每个父级的最大 id的child1实体。
(对于给定的示例,父(id:1)的child1(id:3)和parent(id:2)的child1(id:4))。
此外,我想为child2的每个类型获取最大 ID的child2。
(对于给定的示例,child2(id:3)(最大类型:1),child2(id:6)(最大类型:2),child2(id:7)(最大类型:3) for parent(id:1)和child2(id:8)(最大类型:1)表示父(id:2))
最后,Parent(id:1)在List children1中有一个Child1(id:3),在List children2中有三个Child2(id:3,id:6,id:7)。
抱歉我的英语不好。
感谢您的帮助。
答案 0 :(得分:1)
你应该发布你到目前为止所发表的内容,但是因为我还没有评论Everywhere™,我会帮助你完成第一个,你可以自己尝试第二个。
我假设您要求HQL执行查询。试试这个:
select max(c.id), c.parent.id from Child1 c group by child1.parent.id
您想要的第二个查询非常相似,如果您可以使用该查询,那么它应该很容易。
答案 1 :(得分:0)
我认为你想过滤子集合。查看Hibernate Filters