データベースクエリを処理する永続エンジンとしてJPAを使用します。Mysql/Hibernateで子エンティティを取得する
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オブジェクトに親と子エンティティ(埋め込まれた、独自の一覧オブジェクトを取得したいと思います次のようにテーブル(MySQLは)あり)を次のように変更します。私はちょうど子の1つの実体を各親のために最大のidにしたいと思っています。
(この例では、parent(id:1)のchild1(id:3)とparent(id:2)のchild1(id:4))です。
また、私はchild2のそれぞれのタイプため最大 IDでchild2の取得したいです。 (最大:タイプ:2)、child2(ID:7)(最大タイプ:3)のように、
最後に、親(id:1)には1つのChild1(id:3)が1つあります(親(id:1)と子2(id:8) )をリストchildren1に持ち、リストchildren2に3つのChild2(id:3、id:6、id:7)を持ちます。
私の貧しい人々のために申し訳ありません。
ありがとうございました。
親の最大IDを持つChild1オブジェクトにJPQLクエリを実行する場合は、あなたは何を試しましたか? –