gpt4 book ai didi

java - 使@Fetch 与接口(interface)一起工作

转载 作者:行者123 更新时间:2023-11-29 03:24:28 26 4
gpt4 key购买 nike

我创建了一个包含 Spring Data Neo4j 类的数据访问层在接口(interface)后面访问

例如,我有一个 Car 接口(interface)和一个使用 SDN 注释的 CarNode 类,如 @RelatedTo :

@RelatedTo(elementClass = CarNode.class, type = "drives", direction = OUTGOING)
private Set<Driver> drivers;

如果仔细观察,您会发现@RelatedTo 指的是CarNode。类和 drivers定义为 Set<Driver> (而不是 Set<DriverNode> )。

这很好用。

现在我想使用 @Fetch启用预加载。

如果我只是这样做:

@RelatedTo(elementClass = CarNode.class, type = "drives", direction = OUTGOING)
@Fetch
private Set<Driver> drivers;

我收到以下错误:

Type interface org.my.project.Driver is neither a @NodeEntity nor a @RelationshipEntity

这可能告诉@Fetch它应该期待 DriverNode , 就像 @RelatedTo 一样当我们使用 elementClass属性?

我想避免破坏我当前的架构。感谢您的提示!

最佳答案

我遇到过类似的问题,我使用 Set 中的实现类解决了它字段,即

@RelatedTo(type = "drives", direction = OUTGOING)
@Fetch private Set<DriverNode> drivers;

毕竟drivers集合是私有(private)的,因此它是一个实现细节。要通过接口(interface)强制访问,您可以声明 get/set 方法,这些方法返回/将其作为接口(interface)类型的参数实例:

public Set<? extends Driver> get Drivers() {
return drivers;
}

public void setDrivers(Set<? extends Driver> drivers) {
this.drivers = (Set<DriverNode>) drivers;
}

set你必须转换 Set<Driver> 的方法 Collection 到Set<DriverNode> ,但这并没有违反接口(interface)规则,因为它又是一个被公共(public)接口(interface)隐藏的实现细节。

关于java - 使@Fetch 与接口(interface)一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21783321/

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