Neo4j ogm 使用接口的关系中的neo4j ogm歧义

Neo4j ogm 使用接口的关系中的neo4j ogm歧义,neo4j-ogm,Neo4j Ogm,我正在使用neo4j ogm版本2.1.1,在对同一类型的两个类之间的关系进行建模时,我收到以下错误: AmbiguousBaseClasseException:在类型层次结构中找到多个类,这些类映射到:[Package、Namespace、TypedElement、PackageTableElement、NamedElement、Element、NetworkNode] 我的场景是,我有多个实现PackageTableElement接口的类,比如一个包和一个类。PackageTableElem

我正在使用neo4j ogm版本2.1.1,在对同一类型的两个类之间的关系进行建模时,我收到以下错误:

AmbiguousBaseClasseException:在类型层次结构中找到多个类,这些类映射到:[Package、Namespace、TypedElement、PackageTableElement、NamedElement、Element、NetworkNode]

我的场景是,我有多个实现PackageTableElement接口的类,比如一个包和一个类。PackageTableElement的关系可以有一个或多个PackageTableElements出口

一个包包含许多类。关系似乎保持正常,但在检索时会抛出上面的错误

阅读文档时,如果我理解了“关系中的模糊性”问题,我已经修改了本例中与包的关系,以使用“无方向”类型,这样关系就可以在两个方向上导航。这并没有解决问题。我在下面粘贴了3个域对象以显示我的关系

该结构是从命名空间继承的包,它实现了PackageTableElement接口,该接口具有以下方法和注释: @org.neo4j.ogm.annotation.Relationship(type=“HasPackageableElement”,direction=org.neo4j.ogm.annotation.Relationship.UNDIRECTED) 公共集getPackageableElements()

包实体

@NodeEntity
@JsonTypeName("Package")
public class Package extends Namespace {

public String getURI() {
    return URI;
}

public void setURI(String URI) {
    this.URI = URI;
}

String URI;

@Override
public Integer getSequence() {
    return sequence;
}

@Override
public void setSequence(Integer sequence) {
    this.sequence = sequence;
}

@Index
Integer sequence;
}

命名空间类

@NodeEntity
public class Namespace implements PackagebleElement {

@Override
public Long getId() {
    return id;
}

@Override
public void setId(Long id) {
    this.id = id;
}

@GraphId
private Long id;

@Override
public Set<Comment> getComments() {
    return comments;
}

@Override
public void setComments(Set<Comment> comments) {
    this.comments = comments;
}

private Package owningPackage;

@Override
public Package getOwningPackage() {
    return owningPackage;
}

@org.neo4j.ogm.annotation.Relationship(type = "HAS_COMMENT", direction = org.neo4j.ogm.annotation.Relationship.OUTGOING)
Set<Comment> comments;

@Override
public String getName() {
    return name;
}

@Override
public void setName(String name) {
    this.name = name;
}

@Index
private String name;

@Override
public VisibilityKindEnum getVisibility() {
    return visibility;
}

@Override
public void setVisibility(VisibilityKindEnum visibility) {
    this.visibility = visibility;
}

private VisibilityKindEnum visibility;

Object type;

@Override
public Object getType() {
    return type;
}

@Override
public void setType(Object type) {
    this.type = type;
}

@Override
public Integer getSequence() {
    return sequence;
}

@Override
public void setSequence(Integer sequence) {
    this.sequence = sequence;
}

@Index
Integer sequence;

public static enum ElementTypeEnum {

    Class,
    Package;
}

@Override
public Set<PackageableElement> getPackageableElements() {
    if (packageableElements == null)
        packageableElements = new HashSet<PackageableElement>();
    return packageableElements;
}

@org.neo4j.ogm.annotation.Relationship(type = "HasPackageableElement", direction = Relationship.UNDIRECTED)
public void setPackageableElements(Set<PackageableElement> packageableElements) {
    this.packageableElements = packageableElements;
}

@org.neo4j.ogm.annotation.Relationship(type = "HasPackageableElement", direction = Relationship.UNDIRECTED)
Set<PackageableElement> packageableElements;
}
@NodeEntity
公共类命名空间实现PackageBlelement{
@凌驾
公共长getId(){
返回id;
}
@凌驾
公共无效集合id(长id){
this.id=id;
}
@格拉希德
私人长id;
@凌驾
公共集getComments(){
返回评论;
}
@凌驾
公共void setComments(Set comments){
this.comments=注释;
}
私有包拥有包;
@凌驾
公共包getOwningPackage(){
归还自己的包裹;
}
@org.neo4j.ogm.annotation.Relationship(type=“HAS_COMMENT”,direction=org.neo4j.ogm.annotation.Relationship.outing)
提出意见;
@凌驾
公共字符串getName(){
返回名称;
}
@凌驾
公共void集合名(字符串名){
this.name=名称;
}
@索引
私有字符串名称;
@凌驾
公共可视性Kindenum getVisibility(){
返回能见度;
}
@凌驾
public void setVisibility(VisibilityKindEnum可见性){
这个.可见性=可见性;
}
私有可见性kindenum可见性;
对象类型;
@凌驾
公共对象getType(){
返回类型;
}
@凌驾
公共void集合类型(对象类型){
this.type=type;
}
@凌驾
公共整数getSequence(){
返回序列;
}
@凌驾
公共void集合序列(整数序列){
这个序列=序列;
}
@索引
整数序列;
公共静态枚举元素类型枚举{
类,
包裹
}
@凌驾
公共集getPackageableElements(){
if(packageableElements==null)
packageableElements=newhashset();
返回可打包元素;
}
@org.neo4j.ogm.annotation.Relationship(type=“HasPackageableElement”,direction=Relationship.UNDIRECTED)
public void setPackageableElements(Set packageableElements){
this.packageableElements=packageableElements;
}
@org.neo4j.ogm.annotation.Relationship(type=“HasPackageableElement”,direction=Relationship.UNDIRECTED)
设置packageableElements;
}
PackageTableElement类

@NodeEntity
public interface PackageableElement extends NamedElement {

@org.neo4j.ogm.annotation.Relationship(type = "HasPackageableElement", direction = org.neo4j.ogm.annotation.Relationship.UNDIRECTED)
public Set<PackageableElement> getPackageableElements();

public Integer getSequence();

public void setSequence(Integer sequence);

}
@NodeEntity
公共接口PackageableElement扩展了NamedElement{
@org.neo4j.ogm.annotation.Relationship(type=“HasPackageableElement”,direction=org.neo4j.ogm.annotation.Relationship.UNDIRECTED)
公共集getPackageableElements();
公共整数getSequence();
公共无效集合序列(整数序列);
}
我已经在ogm中调试了元数据类的resolve方法,它对我来说似乎是一个bug。这行字是 if(taxonClassInfo.isInterface()){ debug(“标签位于接口上。正在查找单个实现类…”); taxonClassInfo=findSingleImplementor(分类单元)

findSingleImplementor方法将返回一个接口扩展另一个接口的结果。在我的场景中,NamedElement接口扩展元素接口。这将向解析数组添加一个>1项,然后抛出错误


这是正确的行为吗?我认为它应该寻找具体的实现。

在我的工作项目中进行一些重构之后,我遇到了一个异常
含糊不清的BaseClassException
,比如使用neo4j ogm 2.1.2版

我发现,对于我的特定问题,具体类被扫描了,但泛型类没有被扫描,也就是说,当我创建
SessionFactory
时,我列出了不包含基类的包

特别是我有一个名为
BaseObject
(基类)的类,它由具体的类
Person
扩展


在添加包含
BaseObject
的包之后,当创建
SessionFactory
时,异常消失了。

我做了更多的测试,我认为这是一个bug。当一个接口扩展另一个接口时,解析方法不会区分该接口。它将其视为一个具体类型,而我认为ch不适合这种用法。实体类驻留在哪些包中?如何创建
会话工厂
?在这种情况下,如何将其标记为正确答案?