我怎样才能将 Hibernate FetchType 设置为 "none" 而不是 Eager 或 Lazy,这样它就不会自己加载东西?
How can I set Hibernate FetchType not to Eager or Lazy but to "none" so that it does NOT load the stuff itself?
我有一个 Hibernate class,它有这样的字段:
@OneToMany(
orphanRemoval = true,
mappedBy = "others",
cascade = CascadeType.ALL,
fetch = FetchType.LAZY)
private Set<AnotherEntity> otherEntities;
我们启用了延迟加载,因此它不会一次加载所有内容。
但我想要它,这样它就不会加载任何东西——如果我想加载它,我将使用一个 (Hibernate) 查询来获取所有必要的信息。
如果我只加载主要对象,则不应加载任何其他对象。
entity.getOtherEntities() 应该 return null - 即使有数据。
是否有可能实现这一目标?
有几个示例性选项:
- 您可以使用投影(一个带有 getter 和 setter 的接口,用于您需要获取的字段)。 Here一个例子。
- 您可以将字段提取到超类(使用
MappedSuperclass
)并使用它来仅获取必要的数据。
- 使用
EntityManager.createQuery
你可以使用 jpql 指定字段,然后只获取声明的字段。
我有一个 Hibernate class,它有这样的字段:
@OneToMany(
orphanRemoval = true,
mappedBy = "others",
cascade = CascadeType.ALL,
fetch = FetchType.LAZY)
private Set<AnotherEntity> otherEntities;
我们启用了延迟加载,因此它不会一次加载所有内容。 但我想要它,这样它就不会加载任何东西——如果我想加载它,我将使用一个 (Hibernate) 查询来获取所有必要的信息。 如果我只加载主要对象,则不应加载任何其他对象。
entity.getOtherEntities() 应该 return null - 即使有数据。
是否有可能实现这一目标?
有几个示例性选项:
- 您可以使用投影(一个带有 getter 和 setter 的接口,用于您需要获取的字段)。 Here一个例子。
- 您可以将字段提取到超类(使用
MappedSuperclass
)并使用它来仅获取必要的数据。 - 使用
EntityManager.createQuery
你可以使用 jpql 指定字段,然后只获取声明的字段。