无法在存储库查询中使用枚举(neo4j/Spring Data)

R.B*_*.B. 4 neo4j spring-data-neo4j spring-data-neo4j-4

我根据NodeEntity的Enum属性查询问题.

有问题的NodeEntity定义如下:

@NodeEntity(label = "Entity")
public class MyEntity {

    @GraphId
    private Long internalId;

    ....

    private State state;

    @Transient
    public enum State {
        STATEONE, STATETWO, STATETHREE
    }
    ....
Run Code Online (Sandbox Code Playgroud)

它保存没有问题,状态Enum表示完美,我可以使用其他属性(字符串)查询完全没有问题.但问题是存储库中的以下查询:

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

即查找具有给定状态的所有实体.

没有例外,但是使用它只会返回0个实体的列表.

我已经尝试了各种各样的变体,例如使用WHERE子句,没有运气.

实体持久存在,在同一测试中使用findAll()返回预期的实体列表,其状态与我期望的完全一致.

有什么想法吗?

Lua*_*nne 5

不太清楚这个值@Transient增加了枚举的含义.无论如何,它不能作为Neo4j中的节点或关系持久化.将字段定义为应该持久化的字段就足够了

private State state;

@Transient从枚举中删除注释.有了它,SDN会忽略发送到派生查询的字段.

但是,如果您有充分的理由标记枚举@Transient,请分享它,我们将重新访问此案例.