我有一个Hibernate
实体,它有一个Map到jsonb
列的字段。如果我对整个对象进行操作,我可以使用Repository
轻松地存储和检索它:
@Entity
public class Parent {
...
@Column(name = "children", nullable = false, columnDefinition = "JSONB")
@Type(JsonType.class)
List<Child> children;
...
我想添加一个Repository
方法来单独加载该列。我试过:
@Query("""
SELECT p.children
FROM Parent p
WHERE p.id = :parentId
""")
List<Child> getChildren(@Param("parentId") long parentId);
这给了我一个错误:
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] to type [com.example.Child]
at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:322)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:195)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:175)
...
转换器必须存在于我的项目中,因为我可以将Parent
类作为一个整体加载,而List<Child>
就在那里。我怎样才能重用它来独立地加载这个列呢?
1条答案
按热度按时间5rgfhyps1#
您有以下选项,
选项一
像这样使用JPQL
确保您正在使用的构造函数存在于类中,
选项二
使用@NamedNativeQuery而不是普通的@Query
例如:实体类:
存储库类:
选项三
使用投影界面
确保getter中的列名是精确的