0

2 つのテーブルがあるORDERSとします。OFFERS

POJOを注文する

@Entity
@Table(name = "ORDERS")
public class Order {

    @Column(columnDefinition = "serial")
    private @Id Integer id;
    private @NotNull @Email String ownerEmail;
    private @NotNull Integer offerId;
}

オファー POJO

@Entity
@Table(name = "OFFERS")
public class Offer {

    @Column(columnDefinition = "serial")
    private @Id Integer id;
    private @Email @NotNull String ownerId;
}

Order by ID結果に関連Offerオブジェクトが含まれるように、 EntityManager の単一クエリでフェッチすることは可能ですか?

Order に @Transient Offer フィールドを作成するのと同じように、永続的な Order の Offer データを変更したくないためです。

または、2 つのクエリを作成するしか方法はありませんか?

4

1 に答える 1

2

@Transientofferフィールドに注釈を付けるOrderことは、このフィールドがマップされず、永続化されないことを意味します。実際、このフィールドをマップする必要がありますが、@Column.insertable()@Column.updatable()を false に設定して読み取り専用にします。

@Entity
@Table(name = "ORDERS")
public class Order {

    @Column(columnDefinition = "serial")
    private @Id Integer id;
    private @NotNull @Email String ownerEmail;

    private @NotNull Integer offerId;

    @Column(insertable=false , updateable=false)
    private Offer offer;
}

注文とそれに関連するオファーを 1 回のクエリでフェッチするには、フェッチ結合を使用できます。

SELECT order FROM Order order join fetch order.offer
于 2012-05-09T02:17:23.957 に答える