Spring SDN4中template.createRelationBetween的等效项

Spring SDN4中template.createRelationBetween的等效项,spring,neo4j,spring-data-neo4j,spring-data-neo4j-4,Spring,Neo4j,Spring Data Neo4j,Spring Data Neo4j 4,我的项目目前正在使用Spring-Data-Neo4J 3.3.0,我正在尝试使用新的4.0.0.0版本。 在我的代码中,我有以下代码: neo4jTemplate.createRelationshipBetween(eltOrRel, attribute, valueClass, GraphRelationType.HAS_ATT_VALUE, true) 这段代码的等价物是什么(请在新版SDK中使用) 更特别的是,我不知道如何创建一个给定类型的关系,但为一个特定的类。我如何才能写这样一个创

我的项目目前正在使用Spring-Data-Neo4J 3.3.0,我正在尝试使用新的4.0.0.0版本。 在我的代码中,我有以下代码:

neo4jTemplate.createRelationshipBetween(eltOrRel, attribute, valueClass, GraphRelationType.HAS_ATT_VALUE, true)
这段代码的等价物是什么(请在新版SDK中使用)

更特别的是,我不知道如何创建一个给定类型的关系,但为一个特定的类。我如何才能写这样一个创建密码请

@卢安,这是我的问题的一个小例子

类元素:

@NodeEntity
public class Element {

@GraphId
private Long id;

private int age;

private String  uuid;

@Relationship(type = "HAS_ATT_VALUE")
private Set<HasAttValue> values = new HashSet<HasAttValue>();
...
和类HasAttValue:

@RelationshipEntity(type = "HAS_ATT_VALUE")
public class HasAttValue {

@GraphId
private Long id;

@StartNode
Element element;

@EndNode
Attribute attribute;

private String value;

public HasAttValue() {
}

public HasAttValue(Element element, Attribute attribute, String value) {
    this.element = element;
    this.attribute = attribute;
    this.value = value;
    this.element.getValues().add(this);
}
在第一种情况下,一切都像一个符咒,在您的示例中,我在HAS_ATT_value relationshipEntity上有以下带有我的值的图表(在服务器浏览器中看到):

(Element)->[HAS_ATT_VALUE]->(attribute)
但我的问题是在以下情况下(在以前的SDN中工作得很好)。我没有使用以前的HasatValue类,而是:

@RelationshipEntity(type = "HAS_ATT_VALUE")
public abstract class HasAttValue<T> {

@GraphId
private Long id;

@StartNode
Element element;

@EndNode
Attribute attribute;

private T value;

public HasAttValue() {
}

public HasAttValue(Element element, Attribute attribute, T value) {
    this.element = element;
    this.attribute = attribute;
    this.value = value;
    this.element.getValues().add(this);
}
图中还有一条弧线 (element)[HAS_ATT_VALUE]->(attribute)其中“HAS_ATT_VALUE”是一个relationshipentity,包含数据,但在我的java代码中有不同的实现?同样,当我使用neo4jTemplate.CreateRelationsBetween(eltOrRel,attribute,valueClass,GraphRelationType.HAS_ATT_VALUE,true)来创建我的“hasAttValue”时,它在SDN3中工作得很好关系实体


非常感谢您

在SDN 4.0中,不需要使用Neo4jTemplate方法显式创建关系。持久化定义了@relationships的实体就足够了。如果您在关系上有属性,则需要

SDN 4.0中的对象模型说明可在此处找到

根据@clement提供的其他信息更新:

例如,只需将
@RelationshipEntity
注释从
HasAttValue
类移动到每个子类

@RelationshipEntity(type = "HAS_ATT_VALUE")
public class HasBooleanValue extends HasAttValue<Boolean> {
@RelationshipEntity(type=“HAS_ATT_VALUE”)
公共类HasBooleanValue扩展了hasatValue{
请注意,您将需要最新的OGM快照,因为关于抽象关系实体的问题刚刚得到解决。请使用

  <dependency>
       <groupId>org.neo4j</groupId>
       <artifactId>neo4j-ogm</artifactId>
       <version>1.1.3-SNAPSHOT</version>
  </dependency>
 <repository>
       <id>neo4j-snapshots</id>
       <url>http://m2.neo4j.org/content/repositories/snapshots</url>
       <snapshots>
           <enabled>true</enabled>
       </snapshots>
  </repository> 

org.neo4j


直接使用Cypher不是一个好主意,因为您必须能够查找节点(可能是通过ID),这意味着必须先保存它们。

是的,我知道这一点,并且我已经使用了@RelationshipEntity。我的@StartNode是Element.class类型,我的@EndNode是Attribute.class类型。但是我添加此注释的类有子类(类A和类B)我不想在我的Element.class中创建两个不同的集合(一个用于类型a,一个用于类型B),但我只想保留一组数据(其中我有a和B对象)。这在SDN3中非常有效,但我不知道如何在SDN4中做到这一点。我如何编写这样的密码请求?我回到您这里是因为经过几次测试后,我意识到从图形返回到java的数据并没有转换为良好的类型。例如,我保存了一个HasBooleanValue,当我在另一个会话中获得此数据时,我的数据是不正确的pe HasDateValue…这一点都不好。此外,当我在服务器浏览器中查看Graph时,没有关于“HAS_ATT_VALUE”的信息表示要使用哪种类型的关系。但是我切换到了neo4j ogm 1.1.6-SNAPSHOT。对此有什么想法吗?嗯,很好的一点。除了关系实体中的属性之外,不会有任何关于关系的额外信息。这就是为什么在读取关系时,没有任何信息告诉我们要实例化哪个子类(OGM不检查属性)。这是团队必须讨论的问题-请您在(顺便说一句,没有1.1.6-SNAPSHOT,是1.1.3-SNAPSHOT)上打开一个问题。谢谢@clement,这个示例非常有用。我已经更新了我的答案
public class HasStringValue extends HasAttValue<String> {

private String locale;

public HasStringValue() {
}

public HasStringValue(Element element, Attribute attribut, String value)   {
    super(element, attribut, value);
}
(element)->[HAS_ATT_VALUE]->(HasBooleanValue|HasStringValue)->[ATTRIBUTE]->(Attribute)
@RelationshipEntity(type = "HAS_ATT_VALUE")
public class HasBooleanValue extends HasAttValue<Boolean> {
  <dependency>
       <groupId>org.neo4j</groupId>
       <artifactId>neo4j-ogm</artifactId>
       <version>1.1.3-SNAPSHOT</version>
  </dependency>
 <repository>
       <id>neo4j-snapshots</id>
       <url>http://m2.neo4j.org/content/repositories/snapshots</url>
       <snapshots>
           <enabled>true</enabled>
       </snapshots>
  </repository> 
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-neo4j</artifactId>
    <version>4.1.0.BUILD-SNAPSHOT</version>
</dependency>