Date de primăvară Neo4j - Probleme legate de tipul de relaționare

AM dificultăți în obținerea relațiilor atunci când tipul relației este adnotat cu un câMp @RelationshipType .

Relațiile arată corect în Neoclipse, dar nu obțin rezultate în cererea Mea.

Codul care nu funcționează este (siMplificat):

@NodeEntity
public abstract class Entity {

    @RelatedToVia
    private Collection relationships;

    public Relationship relatedTo(Entity entity, String type) {
        Relationship relationship = new Relationship(type, this, entity);
        relationships.add(relationship);

        return relationship;
    }

    ...
}

și:

@RelationshipEntity
public class Relationship {

    @RelationshipType
    private String type;

    ...
 }

Codul care funcționează este:

@RelationshipEntity(type = "soMething")
public class Relationship {

   ...
}

Cu toate acestea, acest lucru nu se potrivește cu cazul Meu de utilizare (aM o grăMadă de tipuri de Relații diferite între coMbinații arbitrare de instanțe Entity .

Codul de test coMplet este de Mai jos. Agency și IteM sunt aMbele subclase ale Entity .

// Create first entity
Agency arnz = agencyRepository.save(new Agency());
arnz.setCode("ARNZ");
agencyRepository.save(arnz);

// Create second entity
IteM r123 = iteMRepository.save(new IteM());
r123.setCode("R123");

// Create parent/child relationship between entities
r123.relatedTo(arnz, EntityRelationshipType.PARENT);
iteMRepository.save(r123);

// Retrieve entity froM database
Entity entity = iteMRepository.findByCode("R123");

// Verify that relationship is present
assertThat(entity.getRelationships().iterator().hasNext(), is(true));

Linia finală este locul în care testul eșuează. Orice indicii?

M

PS. Sunt un amator amator cu Neo4j și sa întâmplat să găsesc @RelationhipType , așa că am putea face ceva rău ridicol. Sper!

0
Experimentele ulterioare arată că itemRepository.getRelationshipBetween (r123, arnz, Relationship.class, EntityRelationshipType.PARENT); returnează relația conform așteptărilor. Cu toate acestea, din nou, nu este ceea ce cere cazul meu de utilizare, deci nu este de mult folos!
adăugat autor nullPainter, sursa
De asemenea, urmând codul de testare de mai sus, Node node = template.getNode (entity.getId ()); și un apel ulterior la node.getRelationships (); returnează corect relația, doar într-un tip mai puțin util node4j Relationship brut. Deci, în mod clar o problemă de implementare a datelor de primăvară, mai degrabă decât ceva fundamental greșit în graficul meu?
adăugat autor nullPainter, sursa
Și funcționează dacă schimbăm adnotarea din colecție la @RelatedToVia (direction = Direction.BOTH, type = EntityRelationshipType.PARENT) (adică adăugând un type ). Care din nou nu este foarte util, deoarece am nevoie de un set eterogen de tipuri de relații în aceeași colecție. Sau este doar o restricție a cadrului? Folosesc 2.1.0.BUILD-SNAPSHOT.
adăugat autor nullPainter, sursa
Ar trebui să fie acum, puteți încerca dacă funcționează pentru dvs.?
adăugat autor Michael Hunger, sursa

1 răspunsuri

Sorry to disappoint you, but during the retrieval the code right now doesn't look for the type class but rather for the type from @RelatedToVia or @RelationshipEntity or the field name relationships as relationship-type. But you're making a valid point, can you please raise in issue in JIRA?

V-ați uitat în template.getRelationshipsBetween ?

De ce nu creezi clase individuale pentru relațiile tale? Care este cazul pentru această abordare?

0
adăugat
Mulțumesc lui Michael, eu bănuiesc la fel de mult. Singurul motiv pentru care nu creez clase individuale pentru relațiile mele este eleganța dintr-o perspectivă Java. Am obiecte de domeniu Entity <- Relații -> Entity , cu Relația conținând metadatele anului. Există aproximativ opt tipuri de relații bidirecționale între fiecare subclasă a entității ("Agenția este seria CONTROLLED_BY, Seria este, de asemenea, CREATED_BY Agenția, Seria este seria GOVERNED_BY, etc.) Crearea a opt obiecte diferite Relația este puțin ciudat da
adăugat autor nullPainter, sursa
M-am uitat la template.getRelationshipsBetween , care funcționează bine. Cu toate acestea, încerc să construiesc un explorator de date/grafice - utilizatorul selectează o entitate din rezultatele căutării, iar exploratorul afișează entitatea și entitățile asociate până la două adâncimi. Selectarea unei entități asociate se centrează pe acea entitate etc. Deci, cazul de utilizare nu specifică în niciun moment cunoștințe explicite despre entitățile afiliate pentru interogarea în față. Presupun că o alternativă este să folosiți doar un tip de relație "RELATED_TO" și să stocați speci
adăugat autor nullPainter, sursa
Ar fi trebuit să clarific în primul meu comentariu - clasele Entity sunt subclasate pentru a oferi câmpuri suplimentare, totuși clasa Relationship este aceeași pentru toți. Deci, am putea avea Agenția <- Relația -> Series Relația -> Agency etc. Deci, fiecare dintre tipurile de relații între entități împărtășesc o clasă Relație comună ca metadate relaționale.
adăugat autor nullPainter, sursa
De fapt, @Michael, implementarea cazului meu de utilizare a fost prea naivă și prea puternic influențată de structura de date a unui sistem de moștenire existent, care a fost susținută de o bază de date relațională. Stocarea mai multor tipuri de relații în aceeași colecție bidirecțională nu are niciun sens în cazul utilizării traversale și a structurii de date care stau la baza acesteia. S-ar putea să ridic un JIRA indiferent, în cazul în care colecțiile eterogene sunt utile pentru altcineva.
adăugat autor nullPainter, sursa
Mulțumesc mult. Am avut mai multe cazuri de utilizare în care oamenii au vrut să stocheze date polimorfe asupra entităților de relație și să utilizeze relații dinamice pentru aceștia. Deci, acum este în JIRA și de a fi lucrat la.
adăugat autor Michael Hunger, sursa