我正在实体上调用查询方法,它返回 Object[]
而不是List<EntityName>
我不知道为什么。
我有一个带有默认构造函数、getter 和 setter 的实体。 getter 注释为 @Column(name="field name")
.
现在我有了这样的 CRUD 存储库:
@Transactional
public interface MyCrudRepo extends BaseCrudRepo <EntityClassName> {
@Query("SELECT field1,field2,id FROM EntityClassName WHERE field1 = :param1 AND field2 = :param2")
List<EntityClassName> queryMethod(
@Param("param1") String param1,
@Param("param2") String param2, Pageable page);
所以我正在尝试获取 List<EntityClassName>
当我调用该方法但它返回 Object[]
我不知道该怎么办。
我也尝试过:
@Query("SELECT ec FROM EntityClassName ec WHERE field1 = :param1 AND field2 = :param2")
但是我收到查询验证异常
当我调用findAll()
时MyCrudRepo
上的方法实例它返回 List<EntityClassName>
正如预期的那样
难道是因为我的EntityClassName
中没有构造函数类?
最佳答案
看起来您的第二个查询“非常正确”,但要访问实例的字段,会丢失实例名称 (ec
)。因此,请考虑使用以下定义:
public interface MyCrudRepo extends BaseCrudRepo<EntityClassName> {
@Query(
"SELECT ec FROM EntityClassName ec " +
"WHERE ec.field1 = :param1 AND ec.field2 = :param2")
List<EntityClassName> queryMethod(
@Param("param1") String param1,
@Param("param2") String param2,
Pageable page
);
}
实体类的无参数构造函数
Could it be because I have no constructor in the
EntityClassName
class?
根据 JPA 2.1 规范 ( JSR 338: Java™ Persistence 2.1, Final Release ),第 23 页,必须有一个无参数构造函数:
The entity class must have a no-arg constructor. The entity class may have other constructors as well. The no-arg constructor must be public or protected.
关于java - 自定义查询方法返回 Object[] 而不是实体列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45395021/