Hibernate:Eager Fetch Only Specified Fields

时间:2016-05-02 07:51:14

标签: java hibernate jpa orm hibernate-mapping

有没有办法指定在hibernate / JPA @ManyToOne中急切获取的唯一字段--FetchType.EAGER?

类似的东西:

@ManyToOne(fetch=FetchType.EAGER, eagerFields={"id","name"})
private Company company;

1 个答案:

答案 0 :(得分:0)

JPA 2.0规范未定义您尝试实现的可能性,因为@ManyToOne注释定义如下(请参阅section 11.1.26 of the JPA 2.0 specification):

public @interface ManyToOne {
    Class targetEntity() default void.class;
    CascadeType[] cascade() default {};
    FetchType fetch() default EAGER;
    boolean optional() default true;
}

如果为懒惰加载的@Basic(fetch = FetchType.LAZY)实体的字段指定Company,则可以执行仅为选定字段实现急切加载的操作; 不鼓励关联字段以外的字段,因为它取决于提供程序实现的优点,如以下摘录所示:

  

EAGER策略是持久性提供程序运行时的一项要求,数据必须是热切的   牵强。 LAZY策略提示应该获取数据的持久性提供程序运行时   第一次访问时懒洋洋地说。允许实现急切地获取数据   已经指定了LAZY策略提示。特别是,延迟提取可能仅适用于Basic   使用基于属性的访问的映射。