我在实体上调用一个查询方法,它返回Object[]而不是List<EntityName>,我不知道为什么。
我有一个具有默认构造函数、getter和setter的实体。getters被用@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类中没有构造函数吗?
发布于 2017-07-30 00:22:26
看起来您的第二个查询非常正确,但是要访问实例的字段,不需要实例名称(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
    ); 
}实体类的No-arg构造函数
这可能是因为
EntityClassName类中没有构造函数吗?
根据JPA2.1规范(JSR 338: JavaJavaPersistence2.1,最终版本),第23页必须有一个无arg构造函数:
实体类必须具有无arg构造函数。实体类也可能有其他构造函数。no构造函数必须是公共的或受保护的。
https://stackoverflow.com/questions/45395021
复制相似问题