0

假设我们有两张桌子,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;
}

是否可以在 EntityManager 上获取单个查询,Order by ID以便结果包含相关Offer对象?

就像在 Order 中创建 @Transient Offer 字段一样,因为我们不想在持久 Order 上修改 Offer 数据。

或者唯一的方法是创建两个查询?

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;
}

要在单个查询中获取订单及其相关报价,您可以使用 fetch 连接:

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