本Pro JPA 2のこのコード行を理解するのに少し苦労しています。181ページの本によると.
選択クエリの結果の型をコレクションにすることはできません。エンティティ インスタンスや永続フィールド タイプなどの単一値オブジェクトである必要があります。e.phones などの式は、Collection インスタンスになるため、SELECT 句では使用できません (e.phones の各出現はインスタンスではなくコレクションです)。したがって、SQL やテーブルと同様に、コレクションの関連付けに沿って移動し、そのコレクションの要素を返す場合は、2 つのエンティティを結合する必要があります。
以下のエンティティをリレーションシップ マッピングで検討してください
@Entity
public class Employee {
..
@OneToMany(mappedBy="employee", cascade=CascadeType.ALL, targetEntity=Phone.class)
private Collection<Phone> phones = new ArrayList<Phone>();
..
}
@Entity
public class Phone {
..
@OneToOne
private Employee employee;
..
}
今、テストクラスで私はこのテストケースでそれを試しました
@Test
public void selectCollectionTest(){
TypedQuery<Object> query = em.createQuery("select e.phones from Employee e where e.id = 1", Object.class);
List<Object> empList = query.getResultList();
for(Object temp: empList){
System.out.println(temp);
}
}
例外がスローされることを期待していましたが、何も起こらず、コレクションを選択できましたか?
これは正しいです?誰かが私の理解を説明または明確にすることができますか?
Eclipselink