假设我有一个Hibernate实体,声明OneToMany与不同实体的关系:
@Entity
public class SomeEntity {
@OneToMany(fetch = FetchType.LAZY)
private List<OtherEntity> otherEntities = new LinkedList<OtherEntity>();
[...]
}
Run Code Online (Sandbox Code Playgroud)
映射SomeEntity到相应的DTO时,我需要的只是标识OtherEntity为主键的ID (即,我实际上并不感兴趣OtherEntity).
Hibernate是否支持这种模式,即只检索通过OneToMany关系引用的实体的ID ?
我无法影响SomeEntity检索的方式(即,我SomeEntity在当前Hibernate会话的范围内检索到现有实例),但我们假设尚未进行延迟加载,因此只需检索子对象的ID(而不是完整的实际上会产生性能优势.
您可以尝试在不访问实体本身的情况下获取主键(不带otherEntities.get(0).getId())。为此,您可以使用该类PersistenceUnitUtil:
PersistenceUnitUtil#getIdentifier(yourEntity)
可以PersistenceUnitUtil从 中获得EntityManagerFactory。所以它可能是这样的:
EntityManager em = ...
PersistenceUnitUtil = em.getEntityManagerFactory().getPersistenceUnitUtil();
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不知道这是否会阻止实体加载的发生。然而,仅仅访问otherEntities集合甚至获取每个实体的引用并不会使实例被加载;您需要在获取的实体上调用一个方法以确保它将被加载。
您还可以考虑创建@NamedQuery并仅返回OtherEntityID。
哈!
| 归档时间: |
|
| 查看次数: |
520 次 |
| 最近记录: |