繁体   English   中英

当fetch = FetchType.LAZY时,休眠断开代理

[英]Hibernate disconnect proxy when fetch=FetchType.LAZY

@Entity
public class Master implements Serializable{
private List slaves;
@OneToMany(mappedBy = "Master",fetch=FetchType.LAZY)
public List getSlaves() {
   return slaves;
}
}

I want this code to pass.

List m = createQuery("from Master where id=1").getResultList();
for (Master master : m) {
    assertNull(master.getSlaves());
}

我希望getSlaves()返回null而不初始化代理程序以连接到数据库(该主服务器具有从属服务器,并且我不想从数据库中删除它们)。

在Hibernate或JPA中有什么方法可以做到这一点?

当EAGER提取时,还有其他方法吗?

静默失败的代理调试将是一件棘手的事情。

看到休眠代码后,我认为您没有配置它的选项。 您可以尝试反射性地调用collection.setInitialized() ,以伪初始化集合,但这很难看。

如果我对您的理解正确,那么您想要一个实际上具有从属设备的主设备以任何方式返回空值的从属设备列表吗? 这是在测试环境中吗? 您确定这就是您想要的,并且您在正确的轨道上吗?

另一种丑陋的方法是仅将奴隶列表显式设置为null。 只要您在同一个会话中,这将确保getSlaves()返回null,但实际上数据库中不会有任何更改(至少对于休眠状态)。 这种方法也适用于渴望的收藏。

获取Collection不应返回null。 您正在通过使其返回null来在代码中设置一个booby陷阱。

而是让它返回一个空集合并断言该集合为空

assertTrue(master.getSlaves().size() == 0);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM