Neo4j ogm 使用接口的关系中的neo4j ogm歧义
我正在使用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() 包实体Neo4j ogm 使用接口的关系中的neo4j ogm歧义,neo4j-ogm,Neo4j Ogm,我正在使用neo4j ogm版本2.1.1,在对同一类型的两个类之间的关系进行建模时,我收到以下错误: AmbiguousBaseClasseException:在类型层次结构中找到多个类,这些类映射到:[Package、Namespace、TypedElement、PackageTableElement、NamedElement、Element、NetworkNode] 我的场景是,我有多个实现PackageTableElement接口的类,比如一个包和一个类。PackageTableElem
@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不适合这种用法。实体类驻留在哪些包中?如何创建会话工厂
?在这种情况下,如何将其标记为正确答案?