我有很多关于Java 8和SDN4的问题。我在Neo4j v3.0中创建了一个模型,使用了Cypher查询,现在又开始创建一个Spring Boot应用程序了。当我开始用Java编写类时,我也开始重新思考我的一些模型。这是我心中的一些问题(我还没有找到解释这个问题的例子):
Product
界面,然后让我的产品实现它,但是在使用标签时它是如何完成的?ProductFamily
继承我的Product
。在数据库级别,它的建模为(:Product)-[PartOf]->(:ProductFamily)
,但在代码中这些不是超级/子类。 我知道可能没有一个正确的答案,但网上有一点点宝贵的东西,所以希望在这里得到启发!
答案 0 :(得分:2)
如果您的产品界面注明了@NodeEntity
,那么除了实施类的标签之外,您还将拥有Product
标签,我认为这就是您想要的。如果您的界面没有注释,那么您的实现类将不会从中继承标签。
不确定您的意思 - 如果您说ProductFamily
Product
继承了(:Product)-[PartOf]->(:ProductFamily)
,但在代码中它不是超级/子类?
根据您的图表模型,如果您需要Product
,那么您将拥有一个ProductFamily
类,该类维护对@Relationship
类的引用,以及使用Product
注释的引用。如果ProductFamily
类继承自Product
,则保留Product
将导致两个标签 - ProductFamily
和Product
,因为ProductFamily
IS-A @Relationship
。
您如何看待自己使用泛型 - 答案实际上取决于此。有些情况是受支持的,有些则不受支持(现在不支持的一个例子是equivalent of template.createRelationBetween in SDN4)
是的,通过type
注释接受direction
和public static <AnyType extends Comparable<? super AnyType>>
void difference(List<AnyType> L1, List<AnyType> L2, List<AnyType> Difference){
if(L1 == null){
Difference = null;
}
else if(L2 == null || L1.isEmpty() || L2.isEmpty()){
Difference = L1;
}
else{
Iterator<AnyType> iterator1 =L1.listIterator();
Iterator<AnyType> iterator2 =L2.listIterator();
AnyType a = iterator1.next();
AnyType b = iterator2.next();
while(a!=null || b!=null){
int comp = a.compareTo(b);
if(comp > 0)
b =(iterator2.hasNext()) ? iterator2.next(): null;
else if(comp < 0){
Difference.add(a);
a = (iterator1.hasNext())? iterator1.next(): null;
}
else {
a = (iterator1.hasNext())? iterator1.next() : null;
b = (iterator2.hasNext())? iterator2.next() : null;
}
}
if(b==null){
while(a!=null){
Difference.add(a);
a = iterator1.next();
}
}
}
System.out.println("Difference Set: " + Arrays.toString(Difference.toArray()));
}
。请注意,此注释仅限制您的域模型,但您可以通过自定义查询在另一个方向创建关系来完成此操作。