Mir*_*dak 6 java hibernate lazy-loading dto
我正在将我的实体转换为 DTO,并且我想将 NULL 设置为所有字段的 DTO 值,这些字段是延迟加载且未初始化的(因为我不想一直传输所有数据)。
我试过了:
if (!(entity.getNationality() instanceof HibernateProxy))
this.setNationalityFromEntity(entity.getNationality());
Run Code Online (Sandbox Code Playgroud)
但它似乎没有帮助。欢迎任何建议!
谢谢!
该类始终是一个代理,无论它是否已初始化,因此如果您只检查代理的实例,则每次都将排除它。延迟加载不会导致实体上的代理引用被替换为对新对象的引用,它只是填充字段。
要了解它是否确实已初始化,您需要询问它!
if (HibernateProxy.class.isInstance(entity.getNationality())) {
HibernateProxy proxy = HibernateProxy.class.cast(entity.getNationality());
if (!proxy.getHibernateLazyInitializer().isUninitialized()) {
this.setNationalityFromEntity(entity.getNationality());
}
}
Run Code Online (Sandbox Code Playgroud)
我们在实体中这样做的方式是我们有布尔方法,它们以不会触发延迟加载的方式进行检查。例如,如果我们的实体有一个名为“关联的东西”的关联实体,那么检查关联实体是否已延迟加载的方法将是:
public boolean isAssociatedSomethingLoaded() {
if (associatedSomething instanceof HibernateProxy) {
if (((HibernateProxy)associatedSomething).getHibernateLazyInitializer().isUninitialized()) {
return false;
}
}
return (getAssociatedSomething() != null);
}
Run Code Online (Sandbox Code Playgroud)
注意:重要的是不要getAssociatedSomething()在检查中使用,因为这可以确保关联的实体在检查期间不会被延迟加载。
| 归档时间: |
|
| 查看次数: |
12212 次 |
| 最近记录: |