java - Spring Boot - Jpa 独特且可分页

标签 java spring postgresql spring-boot kotlin

我有一个使用 kotlin 的 Spring Boot v 2.1.8.RELEASE 项目。 我们使用 postgres 数据库,我有以下 JPA 查询

    @Query(value = " SELECT distinct grievance " +
               " FROM Grievance grievance" +
               " WHERE (grievance.auditProgramPortal=:auditProgramPortal AND grievance.owner.id=:organizationId) " +
               " OR (grievance.status=:status AND grievance.auditProgramPortal=:auditProgramPortal)" +
               " OR (grievance.auditProgramPortal=:auditProgramPortal AND grievance.owner.id=:organizationId)" +
               " OR (grievance.auditProgramPortal=:auditProgramPortal AND grievance.publicSubmission=:publicSubmission)")
fun findAnalystBodyGrievances(
        auditProgramPortal: Boolean,
        organizationId: Long,
        status: GrievanceStatus,
        publicSubmission: Boolean,
        pageable: Pageable): Page<Grievance>

当我按原样运行时 - 它工作正常。当我对行业字段进行排序时(请参阅下面的对象)- 我收到以下错误

org.postgresql.util.PSQLException: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list

相关对象摘录如下

申诉

@Entity
@Audited
@Table(name = "grievance")
class Grievance {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    var id: Long? = null

    @Column(name = "title", nullable = false)
    var title: String? = null

    @Column(name = "description", columnDefinition = "text")
    var description: String? = null

    @Column(name = "public_description", columnDefinition = "text")
    var publicDescription: String? = null

    @Column(name = "related_to_identified_risk")
    var relatedToIdentifiedRisk: Boolean? = null


    @OneToOne
    @JoinColumn(name = "industry_id")
    var industry: Industry? = null
  }

行业

@Entity
@Table(name = "industry")
class Industry {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    var id: Long? = null

    @Column(name = "name", nullable = false, unique = true)
    var name: String? = null

    @Column(name = "color", nullable = false, unique = false)
    var color: String? = null
}

我的问题是 - 修复查询以便仍返回页面的最简单方法是什么 如果我更新我的代码以使用以下查询 - 返回一个通用对象

@Query(value = " SELECT distinct grievance, grievance.industry " +
               " FROM Grievance grievance" +
               " WHERE (grievance.auditProgramPortal=:auditProgramPortal AND grievance.owner.id=:organizationId) " +
               " OR (grievance.status=:status AND grievance.auditProgramPortal=:auditProgramPortal)" +
               " OR (grievance.auditProgramPortal=:auditProgramPortal AND grievance.owner.id=:organizationId)" +
               " OR (grievance.auditProgramPortal=:auditProgramPortal AND grievance.publicSubmission=:publicSubmission)")

非常感谢对此的任何帮助

最佳答案

试试下面

@Query(value =" Select grievance from (SELECT distinct grievance, grievance.industry " +
" FROM Grievance grievance" +
" WHERE (grievance.auditProgramPortal=:auditProgramPortal AND grievance.owner.id=:organizationId) " +
" OR (grievance.status=:status AND grievance.auditProgramPortal=:auditProgramPortal)" +
" OR (grievance.auditProgramPortal=:auditProgramPortal AND grievance.owner.id=:organizationId)" +
" OR (grievance.auditProgramPortal=:auditProgramPortal AND grievance.publicSubmission=:publicSubmission))")

关于java - Spring Boot - Jpa 独特且可分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57996331/

相关文章:

sql - MongoDB 和 PostgreSQL 的思考

Postgresql 函数不处理重复记录

java - 使用 findAll() Spring JPA PostgreSQL 时出现无限循环

java - Spring 在创建对象后将 JsonView 应用于对象吗?

java - 如何在Spring Retry中打开和关闭@Recover方法?

php - 为什么 foreach($array as $value) 会导致不确定的数据类型

java - 使用递归斐波那契函数时发生堆栈溢出错误

java - 如何创建向上计数的字母数字标识符?

java - 需要帮助来点击一个函数

java - Spring MVC HttpServletRequest请求: which button clicked on