是否可以将节点之间的关系值作为用户定义的类,或者它应该是原始数据类型。例如:
@RelationshipEntity(type = "ALIGNED_WITH")
public class AlignedWith {
@GraphId
private Long id;
private Set<DeptEndorsement> deptEndorsement = new HashSet<>();
@StartNode
private Term startTerm;
@EndNode
private Term endTerm;
// getters and setters
}
public class DeptEndorsement {
private String deptName;
private Integer endorsementCount;
// getters and setters
}
@NodeEntity
public class Term {
@GraphId
private Long id;
private String termName;
@Relationship(type = "ALIGNED_WITH", direction = Relationship.OUTGOING)
private List<AlignedWith> alignedWith = new ArrayList<>();
public void addAlignedWith(AlignedWith alignedWith) {
this.alignedWith.add(alignedWith);
}
// getters and setters
}
如果您发现DeptEndorsement
是我希望作为关系AlignedWith
的值的自定义类
或者,是否可以将HashMap
(例如:HashMap<String, Integer>
)作为节点之间关系的值?
答案 0 :(得分:0)
这是我对这个问题的发现,Neo4J支持的数据类型是:
Boolean,Long,Double,String,List。可以类型化的类型是Short,Integer,Float(尽管你需要指定允许转换,如果条件,请检查下面的内容)Ref. MapCompositeConverter.java
以下条件负责检查Neo4J是否支持该类型,在我的情况下,我没有提供allowCast
为true
,因此java.lang.Integer
不可投射:
if (isCypherType(entryValue) || (allowCast && canCastType(entryValue)))
private boolean isCypherType(Object entryValue) {
return cypherTypes.contains(entryValue.getClass()) || List.class.isAssignableFrom(entryValue.getClass());
}
我从java.lang.Integer
更改为java.lang.Long
,一切正常。您不能像我的案例DeptEndorsement
下面是关系中我的属性的样子。
@Properties
private Map<String, Long> deptEndorsement = new HashMap<>();
@Properties
3.0.0 + Ref: Compatibility 中提供了 neo4j-ogm-core
注释