java - 自定义查询方法返回 Object[] 而不是实体列表

标签 java jpa spring-boot spring-data-jpa

我正在实体上调用查询方法,它返回 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/

相关文章:

java - 使用 JPA 构建 Java 项目时出现问题

java - 将 System.out.println 重定向到日志

java - 当我尝试使用 Selenide 获取 window.dataLayer 时,出现 StaleElementReferenceException

java - Web 应用的更新中心和数据库变更管理

java - 注释映射与 XML 映射和删除实体

java - org.springframework.expression.spel.SpelEvaluationException : EL1007E: Property or field 'xxxxx' cannot be found on null

java - opengl java glTexCoord 问题。我做得不对吗?

java - Android 应用程序 ListView 启动太慢

java - 白标错误页面,此应用程序没有明确的/错误映射,因此您将其视为后备

java - 在 Spring Boot 中将无效的 json 请求正文传递给 Rest api 时未收到异常