Spring - Neo4j数据库:将枚举字符串保存到数据库并作为枚举返回

时间:2016-12-23 06:28:56

标签: java spring enums spring-data-neo4j-4

我希望在我的数据库中保存Enum,但只保存值,而不是名称。例如,我使用CODE_3保存对象,因此在我的数据库中,应该是 ActCode : "3" ,而不是ActCode : "CODE_3"。但是当我找到该对象时,它应该返回为 ActCode.CODE_3 ,而不是String "3"

我有一个这样的枚举:

public enum ActCode {

        CODE_3("3"),
        CODE_4("4"),
        CODE_6("6"),
        CODE_7("7"),
        CODE_12("12"),
        CODE_13("13"),
        CODE_14("14"),
        CODE_15("15"),
        CODE_16("16"),
        CODE_17("17"),
        CODE_18("18"),
        CODE_19("19"),
        CODE_20("20"),
        CODE_23("23")

        private String value;

        private ActCode(String value) {
            this.value = value;
        }

        @Override
        public String toString() {
            return this.value;
        }
}

这是我的班级:

@NodeEntity
public class TestEnum {

    @GraphId
    Long graphId;

    String id;

    String name;

    @Enumerated(EnumType.STRING) 
    ActCode actCode;

}

这就是我在我的服务中保存课程的方式:

TestEnum test = new TestEnum("Enum 1",ActCode.CODE_3);
testEnumRepository.save(test);

当我查看我的数据库时,结果如下: enter image description here

我也尝试使用转换器,这是我的reference

我正在使用Spring 4.3.3.RELEASEHibernate 5.0.11.FinalSDN4.1.3-RELEASEneo4j-ogm-2.0.5

1 个答案:

答案 0 :(得分:0)

目前使用@Convert将不会在java.util.Enum上应用转换器,因为OGM有一个默认转换器,目前无法覆盖。

如果你需要一些工作,那么你可以使ActCode成为@NodeEntity并为数据库本身的枚举构建相同的值。

它并不完美,但在添加此功能之前,它至少会解决问题。与此同时,您可以使用Neo4j OGM Github提出增强请求,以允许自定义转换器与枚举一起使用。

另外,仅供参考:Neo4j-OGM和Spring Data Neo4J不支持@Enumerated等JPA注释。