2016-10-29 4 views
0

이렇게 간단한 구조로하십시오. 봄 데이터 neo4j를 통해 노드 삭제가 포함 된 그래프를 업데이트하는 올바른 방법은 무엇입니까?

@Data 
public class DomainObject { 
    @GraphId 
    protected Long id; 
    public String createdBy; 
    public Date createdTS; 
    public String lstModBy; 
    public Date lstModTS; 
} 

@NodeEntity(label = "StepDef") 
@Data 
public class StepDef extends DomainObject{ 
    private String name; 
    private String type; 
    private String catCode; 
    private String impClass; 
    private String scope; 
    @Relationship(type = "PROPERTY_OF" = Relationship.INCOMING) 
    private List<StepDefProperty> properties; 
} 

@NodeEntity(label = "StepDefProperty") 
@Data 
public class StepDefProperty extends DomainObject{ 
     private String key; 
     private String value; 
     private String type; 
     private String lookupKey; 
} 

나는 관계와 함께 예상대로 완벽하게 저장하는 stepRepo.save (stepDef를) 등록 목록에 StepDefProperty 객체를 추가하고 사용하려고

. 속성 노드 중 하나를 삭제할 때

enter image description here

문제입니다. 따라서 목록에서 속성 노드 중 하나를 제거하고 repo.save (stepDef)를 사용하면 속성 노드가 제거되지 않습니다. 이것이 일관성없는 세션과 관련이 있다고 생각했습니다. repo.save (stepDef)를 수행하기 전에 stepRepo.findOne (stepDef.getId())을 시도했습니다. 이제 노드 사이의 관계가 제거되지만 속성 노드는 여전히 고아로 데이터베이스에 있습니다. 속성 노드가 삭제 될 관계와 함께 예상됩니다. enter image description here 봄 데이터 neo4j를 통해 업데이트하는 올바른 방법은 무엇입니까?

+0

[이 질문에] (http://stackoverflow.com/questions/30130275/spring-data-neo4j-remove-nodeentity-and-all-referenced-nodes/40136479#40136479) 도움이 될까요? – troig

답변

0

StepDef 노드와 StepDefProperty 관계 간의 연결을 해제 할 때 API를 올바르게 사용하고 있습니다.

문제는 OGM Session에게 제거 된 관계의 반대쪽 노드도 삭제하라고 말하지 않았기 때문입니다.

그래서해야 할 일은 삭제할 속성 노드를 가져오고 컬렉션에서 제거하는 것입니다 (StepDef). 그러면 repo.delete(StepDefPropertyToBeDeleted)repo.save(stepDef)으로 전화하면 모든 것이 의도 한대로 작동합니다.

+0

답변 해 주셔서 감사합니다. 그러나 이것은 내가 수행하는 프레임 워크가 아니라 삭제할 노드를 수동으로 추적해야한다는 것을 의미합니다. 봄 데이터가 나를 위해 그것을 처리하기를 바랄 것입니다. –

+0

어떤 다른 프레임 워크에서 엔티티가 삭제 되길 기대합니까? 도메인 객체가 잘 캡슐화되어 있다면, 삭제 될 객체를 얻는 것이 꽤 쉬워 질 것입니다. – digx1

+0

(이 오래된 글타래를 찾아서 죄송합니다). Hibernate는 관계형 주석을 위해 "orphanRemoval"이라는 이름을 가진 속성을 제공한다. 저장된 엔티티와의 관계를 잃어버린 엔티티를 제거한다 (예 : 부모 엔티티 저장시). spring-data-neo4j는 최신 버전에도 이와 비슷한 기능을 제공합니까? 이렇게하면 상용구 코드 (고아 삭제 용)가 많이 줄어들 것입니다. – David