我有一个具有实体 B 外键的实体 A:
entity A --> id, entity_a_name, foreign_key_entity_B
当我打电话
return session.createCriteria(EntityA.class).list();
我也在实体 A 中获得了 entityB 的属性。如何使其延迟加载,以便在不需要时不会加载 enityB?
我有一个具有实体 B 外键的实体 A:
entity A --> id, entity_a_name, foreign_key_entity_B
当我打电话
return session.createCriteria(EntityA.class).list();
我也在实体 A 中获得了 entityB 的属性。如何使其延迟加载,以便在不需要时不会加载 enityB?
从您的描述中不清楚您在谈论哪种类型的关系,但如果是多对一或一对一,事情就不那么简单了。如果A.entityB
是可空的(非可选的),那么 Hibernate 被迫急切加载关系以查看属性是否为空。只有通过将关系标记为非可选(在这种情况下,Hibernate假定它不为空,否则它是一个错误),您才能使其延迟加载。
@LazyCollection :定义 @ManyToMany 和 @OneToMany 关联的惰性选项。LazyCollectionOption 可以是 TRUE(集合是惰性的,将在其状态被访问时加载),EXTRA(集合是惰性的,所有操作都会尽量避免加载集合,这对于加载所有元素时的大型集合特别有用没有必要)和 FALSE(关联不懒惰)
@Fetch :定义用于加载关联的获取策略。FetchMode 可以是 SELECT(需要加载关联时触发选择)、SUBSELECT(仅适用于集合,使用子选择策略 - 请参阅 Hibernate 参考文档以获取更多信息)或 JOIN(使用 SQL JOIN 加载加载所有者实体时的关联)。JOIN 覆盖任何惰性属性(通过 JOIN 策略加载的 as 关联不能是惰性的)。