【问题标题】:Return column name in a JpaRepository query in Spring Boot using PostgreSQL使用 PostgreSQL 在 Spring Boot 中的 JpaRepository 查询中返回列名
【发布时间】:2018-10-30 15:01:58
【问题描述】:

我有一个表 Job_Applicants,其中有一个名为 review 的列,其中包含一个布尔值,还有一个状态列,其中包含一个字符串值

当做如下查询时

@Query("select a.applicant, a.reviewed, a.status from JobApplicants a where
a.job.id = ?1")
List<JobApplicants> getOnlyApplicants(UUID jobId);

我得到以下信息:

"jobApplicantList": {
        "bca4ed5c-b81a-420d-8b8b-9130d815d5f1":[
            {
            "id": "109ca778-8526-40c6-a9dd-1f4e6ef2fef7",
            "createdDate": "2018-05-20T11:22:50.607",
            "lastModifiedDate": "2018-05-20T11:22:50.607",
            "address": null,
            "firstName": "Xxxx",
            "lastName": "Xxx",
            "email": "xxxx@gmail.com",
            "phoneNumber": "xxxxxx",
            "resume": "xxx.pdf",
            "resumeUrl": "https://",
            "coverLetter": "xxx.pdf",
            "coverLetterUrl": "https:/",
            "website": "sdfasdfasdf"
        },
        null,
        null
    ],
}

我添加的所有 XXX 用于删除个人信息。

但是您可以看到,reviewed 和 status 列没有列名,有没有办法可以调整我的查询以包含列名?

所以它最后不读“null,null”?

我想让它读为“reviewed”:null,“status”:null

如果有帮助,这是我的实体

import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.UUID;

@Entity
@Table(name = "JOB_APPLICANTS")
public class JobApplicants {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @org.hibernate.annotations.Type(type="org.hibernate.type.PostgresUUIDType")
    private UUID id;

    private String status;
    private Boolean reviewed;
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "APPLICANT_ID")
    private Applicant applicant;
    @ManyToOne()
    @JoinColumn(name = "JOB_ID")
    private Job job;

    @CreationTimestamp
    private LocalDateTime appliedOnDate;
    @UpdateTimestamp
    private LocalDateTime lastModifiedDate;


    public JobApplicants(){}

    public UUID getId() {
        return id;
    }

    public void setId(UUID id) {
        this.id = id;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Boolean getReviewed() {
        return reviewed;
    }

    public void setReviewed(Boolean reviewed) {
        this.reviewed = reviewed;
    }

    public Applicant getApplicant() {
        return applicant;
    }

    public void setApplicant(Applicant applicant) {
        this.applicant = applicant;
    }

    public Job getJob() {
        return job;
    }

    public void setJob(Job job) {
        this.job = job;
    }

    public LocalDateTime getAppliedOnDate() {
        return appliedOnDate;
    }

    public void setAppliedOnDate(LocalDateTime appliedOnDate) {
        this.appliedOnDate = appliedOnDate;
    }

    public LocalDateTime getLastModifiedDate() {
        return lastModifiedDate;
    }

    public void setLastModifiedDate(LocalDateTime lastModifiedDate) {
        this.lastModifiedDate = lastModifiedDate;
    }

    @Override
    public String toString() {
        return "JobApplicants{" +
                "id=" + id +
                ", status='" + status + '\'' +
                ", reviewed=" + reviewed +
                ", applicant=" + applicant +
                ", job=" + job +
                ", appliedOnDate=" + appliedOnDate +
                ", lastModifiedDate=" + lastModifiedDate +
                '}';
    }
}

【问题讨论】:

  • 但正如您所见,review 和 status 列带有列名, - 你是什么意思?
  • 在查询的末尾只有“null,null”我希望它读取“status:null,reviewed:null”以便能够在前端正确显示。 @ScaryWombat
  • @SpaceOso 我认为你的意思是“出来没有列名”
  • 提示:"address": null, 工作正常,因此请检查该代码以了解它是如何完成的
  • @UsamaAmjad 你是对的,我更新了我的帖子。

标签: java sql postgresql spring-boot jpa


【解决方案1】:

我找到了答案。得到我想要的结果的正确查询是:

@Query("select new JobApplicants (a.status, a.reviewed, a.applicant, a.appliedOnDate, a.lastModifiedDate) from JobApplicants a where a.job.id = :jobId")
    List<JobApplicants> getOnlyApplicants(@Param("jobId") UUID jobId);

该查询返回:

"bca4ed5c-b81a-420d-8b8b-9130d815d5f1": [
        {
            "id": "ca72dbf5-d20e-482b-a983-909866342c0c",
            "applicant": {
                "id": "109ca778-8526-40c6-a9dd-1f4e6ef2fef7",
                "createdDate": "2018-05-20T11:22:50.607",
                "lastModifiedDate": "2018-05-20T11:22:50.607",
                "address": null,
                "firstName": "Xxxx",
                "lastName": "xxx",
                "email": "xxx@gmail.com",
                "phoneNumber": "xxx",
                "resume": "xxx.pdf",
                "resumeUrl": "https://xxx.pdf",
                "coverLetter": "xxx.pdf",
                "coverLetterUrl": "https://xxx.pdf",
                "website": "sdfasdfasdf"
            },
            "job": null,
            "appliedOnDate": "2018-05-20T11:22:50.611",
            "lastModifiedDate": "2018-05-20T11:22:50.611",
            "status": "approved",
            "reviewed": null
        },

如果您遇到同样的问题,这两个线程可以帮助我解决问题:

How to return a custom object from a Spring Data JPA GROUP BY query

jpa constructor expressions with multiple SELECT NEW statements

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    相关资源
    最近更新 更多