Java 使用接口使@Fetch工作
我创建了一个数据访问层,其中包含Spring数据Neo4j类,这些类在接口后面访问 例如,我有一个Car接口和一个CarNode类,它使用SDN注释,如Java 使用接口使@Fetch工作,java,spring,neo4j,spring-data-neo4j,Java,Spring,Neo4j,Spring Data Neo4j,我创建了一个数据访问层,其中包含Spring数据Neo4j类,这些类在接口后面访问 例如,我有一个Car接口和一个CarNode类,它使用SDN注释,如@RelatedTo: @RelatedTo(elementClass=CarNode.class,type=“drives”,direction=OUTGOING) 私家车司机; 如果仔细观察,@RelatedTo指的是CarNode类,驱动程序被定义为Set(而不是Set) 这个很好用 现在我想使用@Fetch来启用即时加载 如果我只是这样
@RelatedTo
:
@RelatedTo(elementClass=CarNode.class,type=“drives”,direction=OUTGOING)
私家车司机;
如果仔细观察,@RelatedTo指的是CarNode
类,驱动程序
被定义为Set
(而不是Set
)
这个很好用
现在我想使用@Fetch
来启用即时加载
如果我只是这样做:
@RelatedTo(elementClass=CarNode.class,type=“drives”,direction=OUTGOING)
@取回
私家车司机;
我得到以下错误:
Type interface org.my.project.Driver is neither a @NodeEntity nor a @RelationshipEntity
这是否可以告诉@Fetch
它应该期望DriverNode
,就像我们使用elementClass
属性时使用@RelatedTo
一样
我希望避免破坏我当前的体系结构。谢谢你的提示 我遇到了一个类似的问题,我使用
Set
字段中的实现类解决了它,即
@RelatedTo(type = "drives", direction = OUTGOING)
@Fetch private Set<DriverNode> drivers;
在
set
方法中,您必须将set
集合强制转换为set
,但这并没有违反接口规则,因为它还是一个被公共接口隐藏的实现细节。我遇到了一个类似的问题,我使用set
字段中的实现类解决了它,即
@RelatedTo(type = "drives", direction = OUTGOING)
@Fetch private Set<DriverNode> drivers;
在
set
方法中,您必须将set
集合强制转换为set
,但这并没有违反接口规则,因为它还是一个被公共接口隐藏的实现细节。我发布这个问题已经一年多了。再看一遍,问题现在对我来说是显而易见的:我完全误解并误用了elementClass
属性。当我写道:
@RelatedTo(elementClass = CarNode.class, type = "drives", direction = OUTGOING)
private Set<Driver> drivers;
因此,唯一需要使用DriverNode
具体类的地方是elementClass
属性内部。您根本不需要使用泛型
脚印:我不再使用
@Fetch
。我发布这个问题已经一年多了。再看一遍,问题现在对我来说是显而易见的:我完全误解并误用了elementClass
属性。当我写道:
@RelatedTo(elementClass = CarNode.class, type = "drives", direction = OUTGOING)
private Set<Driver> drivers;
因此,唯一需要使用DriverNode
具体类的地方是elementClass
属性内部。您根本不需要使用泛型
脚印:我不再使用
@Fetch
。你好,雷米吉奥。我尝试了你的想法,但我发现类型不匹配:无法从集合转换到集合
。似乎不可能进行收藏。你确定这是你用的吗?我的错,我用正确的代码编辑了我的答案。谢谢,这很有效。唯一的缺点是我的接口现在显示set这也是我关心的问题,不管怎样,这是一个获得更好抽象的代价。嗨,Remigio。我尝试了你的想法,但我发现类型不匹配:无法从集合转换到集合
。似乎不可能进行收藏。你确定这是你用的吗?我的错,我用正确的代码编辑了我的答案。谢谢,这很有效。唯一的缺点是我的接口现在显示set这也是我关心的问题,不管怎样,这是一个获得更好抽象的代价。