如何解决Spring数据neo4j自定义@QueryResult无法识别枚举
我正在尝试使用来自不同节点的多个字段创建自定义@QueryResult
,但是查询结果机制似乎无法正确映射枚举。
这是我为此场景制作的一个示例。我创建了一个基本的枚举为:
public enum MyEnum{
SOMETHING,SOMETHING_ELSE
}
和带有查询的spring data neo4j存储库方法:
@Query("Match (people:People)-[:LIVES_IN]->(country:Country) " +
"RETURN people.enum")
List<WithEnumQueryResult> findPeople();
当我触发它时会引发异常:
org.springframework.data.mapping.model.MappingInstantiationException: Failed to instantiate pl.degath.WithEnumQueryResult using constructor pl.degath.WithEnumQueryResult(pl.degath.MyEnum) with arguments SOMETHING_ELSE
通过反复试验,我能够看到:
@Builder
@Getter
@QueryResult
public class WithEnumQueryResult{
private final MyEnum enum; //this one I would like to have,but throws error
private final String enum; //this returns my enum as String (doesn't throw error)
private final People people; //this one has correct enum as a property of people (doesn't throw error)
}
我也尝试添加一些@Converter例如在我的枚举属性前面的@Convert(EnumStringConverter.class)
注释,但没有用。
关于如何使QueryResult识别枚举的任何想法?
编辑:
正如已接受答案的注释中所述,似乎枚举需要no-args构造函数,因此我不得不将不可变对象更改为:
@Builder
@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor
@QueryResult
public class WithEnumQueryResult{
private MyEnum enum; //enum is visible now!
}
解决方法
下面是我的实体类和存储库,它们可以很好地工作。
@Data
@QueryResult
public class PersonResponse {
private Long id;
private String name;
private int age;
private City livesAt;
private Test test;
private List<Person> friends;
}
public enum Test {
A,B
}
存储库方法
@Query("MATCH (pr:Person) where ID(pr)=$id return ID(pr) as id,pr.test as test,pr.name as name,pr.age as age")
public PersonResponse getPerson(Long id);
结果:
{
"id": 68,"name": "Alex","age": 24,"test": "A",}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。