gpt4 book ai didi

java - JPA 未加载延迟提取集合的问题

转载 作者:行者123 更新时间:2023-11-29 09:14:43 25 4
gpt4 key购买 nike

我在 JPA 拒绝获取设置为延迟获取的集合时遇到问题。以下是实体的定义方式:

报告实体

//bi-directional many-to-one association to Host
@OneToMany(mappedBy="report", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
private Set<Host> hosts;

宿主实体

//bi-directional many-to-one association to Report
@ManyToOne
@JoinColumn(name="INCIDENT_ID")
private Report report;

出于某种原因,我无法将主机设置为加载到内存中,并且主机始终为空。我在 stackoverflow 帖子上发现了以下内容,但它也不起作用:

public void loadHosts(Report report)
{
PersistenceUtil unitUtil = getEntityManager().getEntityManagerFactory().getPersistenceUnitUtil();
System.out.println("isLoaded(report, \"hosts\"): " + unitUtil.isLoaded(report, "hosts"));
initializeCollection(report.getHosts());
System.out.println("isLoaded(report, \"hosts\"): " + unitUtil.isLoaded(report, "hosts"));
}

private void initializeCollection(Collection<?> collection)
{
if(collection == null)
{
return;
}
collection.iterator().hasNext();
}

上面的输出:

SystemOut     O isLoaded(report, "hosts"): false
SystemOut O isLoaded(report, "hosts"): false

有什么想法吗?

最佳答案

我认为您必须在 session.get(object) 和 tx.commit 之间调用 getHosts。或者您也可以决定使用 fetch=FetchType.EAGER(尽管这可能不是一个好主意)

关于java - JPA 未加载延迟提取集合的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10236068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com