Java8和Spring Data Neo4j应用程序查询

时间:2016-06-12 14:02:55

标签: neo4j spring-boot java-8 spring-data-neo4j-4 neo4j-ogm

我有很多关于Java 8和SDN4的问题。我在Neo4j v3.0中创建了一个模型,使用了Cypher查询,现在又开始创建一个Spring Boot应用程序了。当我开始用Java编写类时,我也开始重新思考我的一些模型。这是我心中的一些问题(我还没有找到解释这个问题的例子):

  1. 您是否需要在Java中使用带有SDN的接口?例如。我编写了一个Product界面,然后让我的产品实现它,但是在使用标签时它是如何完成的?
  2. 这与我的继承问题有关 - 我通常会ProductFamily继承我的Product。在数据库级别,它的建模为(:Product)-[PartOf]->(:ProductFamily),但在代码中这些不是超级/子类。
  3. 在图形上下文中使用泛型的任何示例?
  4. 有没有办法在Java中定义节点可以拥有的关系及其方向的约束?
  5. 我知道可能没有一个正确的答案,但网上有一点点宝贵的东西,所以希望在这里得到启发!

1 个答案:

答案 0 :(得分:2)

  1. 如果您的产品界面注明了@NodeEntity,那么除了实施类的标签之外,您还将拥有Product标签,我认为这就是您想要的。如果您的界面没有注释,那么您的实现类将不会从中继承标签。

  2. 不确定您的意思 - 如果您说ProductFamily Product继承了(:Product)-[PartOf]->(:ProductFamily),但在代码中它不是超级/子类? 根据您的图表模型,如果您需要Product,那么您将拥有一个ProductFamily类,该类维护对@Relationship类的引用,以及使用Product注释的引用。如果ProductFamily类继承自Product,则保留Product将导致两个标签 - ProductFamilyProduct,因为ProductFamily IS-A @Relationship

  3. 您如何看待自己使用泛型 - 答案实际上取决于此。有些情况是受支持的,有些则不受支持(现在不支持的一个例子是equivalent of template.createRelationBetween in SDN4

  4. 是的,通过type注释接受directionpublic 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())); } 。请注意,此注释仅限制您的域模型,但您可以通过自定义查询在另一个方向创建关系来完成此操作。