gpt4 book ai didi

java - 具有相同实体的 Fetchtype.LAZY

转载 作者:行者123 更新时间:2023-12-01 08:58:38 26 4
gpt4 key购买 nike

我构建了一个存储在数据库中的树结构。该关系建立在数据库表中的 id、parent_id 列上。我正在使用 Spring Data 和 Hibernate。

为了访问树结构,我构建了一个实体类“Node”和一个“NodeRepository”。实体类有一个属性“children”,它与其自身具有 @OneToMany 关系。

获取节点没有问题。但是获取子级是一个问题,因为事务环境之外的延迟获取(“无法延迟初始化角色集合”)。

我将 Fetchmode 更改为 eager。但这也是一个问题,因为与其自身的关系,它最终会获取整个树结构。

那么,在这种情况下,最好的做法是什么,以保持一侧轻松检索子项,而不是在另一侧获取整个结构?

最佳答案

我认为我找到了适合我需求的解决方案。

首先,我定义了一个自定义接口(interface),它扩展了我的 NodeRepository 接口(interface),为其提供了一个附加方法“findOneWithChildrenInit”并实现了它。

public interface NodeRepositoryCustom {

public Node findOneWithChildrenInit(Long id);

}

public class NodeRepositoryImpl implements NodeRepositoryCustom {

@Autowired
NodeRepository repo;

@Override
@Transactional
public Node findOneWithChildrenInit(Long id) {
Node node = repo.findOne(id);
node.getChildren().size();
return node;
}

}

所以我可以决定。当我不需要 child 时,我可以简单地调用findOne()。然后我需要它们,我调用 findOneWithChildrenInit()。

关于java - 具有相同实体的 Fetchtype.LAZY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41873226/

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