首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自定义查询方法正在返回一个Object[],而不是一个实体列表。

自定义查询方法正在返回一个Object[],而不是一个实体列表。
EN

Stack Overflow用户
提问于 2017-07-29 23:38:36
回答 1查看 1.4K关注 0票数 0

我在实体上调用一个查询方法,它返回Object[]而不是List<EntityName>,我不知道为什么。

我有一个具有默认构造函数、getter和setter的实体。getters被用@Column(name="field name")注释。

现在我有了这样的CRUD存储库:

代码语言:javascript
运行
复制
@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[],我不知道该做什么。

我也试过:

代码语言:javascript
运行
复制
@Query("SELECT ec FROM EntityClassName ec WHERE field1 = :param1 AND field2 = :param2")

但是我得到了一个查询验证异常。

当我在findAll()实例上调用MyCrudRepo方法时,它会像预期的那样返回一个List<EntityClassName>

这可能是因为EntityClassName类中没有构造函数吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-30 00:22:26

看起来您的第二个查询非常正确,但是要访问实例的字段,不需要实例名称(ec)。因此,请考虑使用以下定义:

代码语言:javascript
运行
复制
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构造函数必须是公共的或受保护的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45395021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档