我在实体上调用查询方法,它返回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
类中没有构造函数吗?
答案 0 :(得分:1)
看起来您的第二个查询“非常正确”,但要访问实例的字段,实例名称(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
);
}
可能是因为
EntityClassName
类中没有构造函数吗?
根据JPA 2.1规范(JSR 338: Java™ Persistence 2.1, Final Release),第23页必须有一个无参数构造函数:
实体类必须具有无参数构造函数。实体类也可以有其他构造函数。 no-arg构造函数必须是公共的或受保护的。