【问题标题】:Hibernate: Eager Fetch Only Specified FieldsHibernate:只渴望获取指定的字段
【发布时间】:2016-05-02 07:51:14
【问题描述】:

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

类似:

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

【问题讨论】:

  • 不,您通常不应将EAGER 设置为默认值,因为您可以编写查询以使用FETCH 进行急切检索,但您不能将它们编写为使用延迟加载.

标签: java hibernate jpa orm hibernate-mapping


【解决方案1】:

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

如果您为要延迟加载的Companyentity 的字段指定@Basic(fetch = FetchType.LAZY),则可以执行仅对选定字段进行预加载的方法; 但是对于关联字段以外的字段不鼓励这样做,因为它取决于提供者实现的摆布,如下面的摘录所示:

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

【讨论】:

    猜你喜欢
    • 2011-04-28
    • 2014-05-15
    • 2012-04-30
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多