2017-05-03 13 views
0

通常のクエリを作成するときに、IntVarchar2などの属性が熱心に遅れて取得されるかどうかを知りたいです。JPAは非エンティティ属性を熱心に取得しますか?

@Entity 
@Table(name = "ROOM") 
public class Room implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue 
    @Column(name = "room_id") 
    private Integer id; 

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

    @Column(name = "capacity") 
    private Integer capacity;  //Will this be fetched eagerly??? 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "building_id") 
    private Building building; 

    ... 
    ... 
    ... 
} 

基本的には:

Room room = getRoomById(5); // select room from Room room where room.id = 5; 
Integer roomCap = room.getCapacity(); //Will this create another query? 

それとも、すでにroomオブジェクトの内部になりますか?

+0

「@ Basic」というアノテーションは何を表していますか?これがそのタイプを表すものであり、JPAはJavaタイプのものであり、一部のDBタイプではありません。 http://www.datanucleus.org/products/accessplatform_5_1/jpa/annotations.html#Basic –

+0

IntとVarcharの場合、私は整数と文字列がJavaであることを意味しました。プレーン属性、非エンティティ。 –

答えて

1

フェッチ戦略は、同じエンティティまたはテーブルに含まれる列ではなく、別の表からデータをロードする関係または関連エンティティに適用されます。エンティティを取得するときに、同じエンティティまたはテーブルに属する列またはフィールドがフェッチされ、別のクエリは実行されません。

+0

これはHibernateとEclipseLinkに適用されますか?ありがとう。 –

+0

はい、そうです。 JPAのすべての実装に適用されます。 – OTM

0

このオブジェクトを使用するオブジェクトの後にデータ呼び出し後に遅延ロードを使用する場合は、オブジェクトのクエリにdbを実行してdbを実行します。

すべての要素thatsオブジェクトを取得するとき

関連する問題