2016-08-26 5 views
4

내 NodeEntity의 Enum 속성을 기반으로 쿼리하는 데 문제가 있습니다.리포지토리 쿼리에서 열거 형을 사용할 수 없습니다 (neo4j/스프링 데이터)

그것은 문제없이 저장
@NodeEntity(label = "Entity") 
public class MyEntity { 

    @GraphId 
    private Long internalId; 

    .... 

    private State state; 

    @Transient 
    public enum State { 
     STATEONE, STATETWO, STATETHREE 
    } 
    .... 

이 상태 열거 완벽하게 표현, 나는 전혀 문제없이 다른 속성 (문자열)를 사용하여 조회 할 수 있습니다

문제의 NodeEntity가 정의됩니다. 그러나 문제는 저장소의 다음 쿼리입니다.

@Query("MATCH (entity:Entity {state:{0}})" + 
     "RETURN entity") 
List<MyEntity> findByState(MyEntity.State state) 

즉 주어진 상태의 모든 엔터티를 찾으십시오.

예외는 없지만이를 사용하면 단순히 0 개의 엔터티 목록 만 반환됩니다.

예를 들어 행운과 함께 WHERE 절을 사용하여 모든 변형을 시도했습니다.

동일한 테스트에서 findAll()을 사용하면 예상되는 상태의 엔터티 목록이 정확히 예상대로 반환됩니다.

의견이 있으십니까?

+1

안녕하세요 @ R.B! 속성 상태가 neo4j 데이터베이스에 올바르게 저장되어 있습니까? 유스 케이스를 재현하고 enum @Transient를 선언하려고 시도했습니다. 속성 상태는 유지되지 않습니다. 일시적인 주석 상태를 제거하면 쿼리가 올바르게 유지되고 쿼리가 올바르게 작동합니다. 그것을 시도해 볼 수 있습니까? – troig

+1

그것은 확실히 지속되었습니다. 저에게 엔티티는 문제없이 저장 될 수 있으며 "state"속성은 트랜잭션 메소드를 사용하여 수정할 수도 있습니다. 그러나 열거 형 (enum) 정의에서 실제로 문제가 발생했습니다. 고맙습니다. 질문이 없으면 아무런 문제가 없습니다. –

답변

5

숫자 @Transient이 enum에 무엇을 추가하는지 잘 모르겠습니다. 어쨌든 Neo4j에서 노드 또는 관계로 지속 할 수 없습니다.

private State state;

로 유지하고 열거에서 @Transient 주석을 남겨 두어야 것과 필드를 정의하기에 충분하다. SDN은 파생 된 쿼리로 전송 된 필드를 무시합니다.

그러나 enum @Transient를 표시해야하는 타당한 이유가있는 경우 공유하고 공유하십시오.이 사례를 다시 방문하겠습니다.

+0

감사합니다.이 답변입니다. 일시적으로 문제가 발생했습니다. 이것은 SDN이 열거 형을 사용하여 아무 것도하지 않으려 고하는 예방 조치로 추가되었습니다. 그러나 어쨌든 @Transient가 없으면 이런 식으로 행동한다는 것은 완벽합니다. 당신의지도에 감사드립니다. –