A projektem jelenleg a Spring-Data-Neo4J 3.3.0-t használja, és az új 4.0.0.Release verziót próbálom használni. A kódomban a következő kód szerepel:
neo4jTemplate.createRelationshipBetween(eltOrRel, attribute, valueClass, GraphRelationType.HAS_ATT_VALUE, true)
Mi a megfelelője ennek a kódnak (amely a ez a módszer api-ban az SDK új verziójában kérem ?
Pontosabban nem tudom, hogyan kell egy adott típusú relációt létrehozni, de egy adott osztályhoz. Hogyan írhatok egy ilyen alkotást cypherben?
@Luanne Itt van egy kis példa a problémámra.
Osztály elem:
@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>();
...
Osztály attribútum:
@NodeEntity
public class Attribute {
@GraphId
private Long id;
private String attName;
És a HasAttValue osztály:
@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);
}
Ebben az első esetben minden úgy működik, mint egy varázslat, és mint az Ön példájában, a következő grafikonom van (a kiszolgáló böngészőjében) a HAS_ATT_VALUE kapcsolatEntity értékemmel:
(Element)->[HAS_ATT_VALUE]->(attribute)
De a problémám a következő esetben van (ami jól működött az előző SDN-nel). Az előző HasAttValue osztály helyett a következőt használom:
@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);
}
például két alosztállyal. Első :
public class HasBooleanValue extends HasAttValue<Boolean> {
public HasBooleanValue() {
}
public HasBooleanValue(Element elt, Attribute attribut, Boolean value) {
super(elt, attribut, value);
}
}
A második :
public class HasStringValue extends HasAttValue<String> {
private String locale;
public HasStringValue() {
}
public HasStringValue(Element element, Attribute attribut, String value) {
super(element, attribut, value);
}
Ebben az esetben a grafikon a következő:
(element)->[HAS_ATT_VALUE]->(HasBooleanValue|HasStringValue)->[ATTRIBUTE]->(Attribute)
és egy másik ív a gráfban (elem)‹-[ELEMENT]-(HasBooleanValue|HasStringValue)
Tehát hogyan tudom megtenni, hogy mindig legyen (elem)->[HAS_ATT_VALUE]->(attribútum), ahol a "has_att_value" egy adatokat tartalmazó kapcsolat, de eltérő implementációkkal rendelkezik a Java kódomban? Ez ismét jól működött az SDN3-ban, amikor a neo4jTemplate.createRelationshipBetween(eltOrRel, attribútum, valueClass, GraphRelationType.HAS_ATT_VALUE, true) paramétert használtam a "hasAttValue" kapcsolatEntity létrehozásához.
Nagyon szépen köszönjük