postgresql - Postgres View 在执行 SQL 时返回正确的行,但使用 REST 查询多次返回一行

标签 postgresql rest spring-boot view

早上好,我有以下名为 user_popular_photos 的 View 。让我对这里的查询做一些解释。 feed_item 是一个表,feed_item_counts 是另一个 View ,它结合了另一个表中针对特定 feed_item 的条目的点赞数

SELECT f.author,
    f.thumbnail_url,
    f.feed_id
   FROM feed_item f
     JOIN ( SELECT f2.feed_item_id,
            f2.like_count AS count
           FROM feed_item_counts f2
          WHERE f2.like_count > 0) t2 ON f.feed_id = t2.feed_item_id
  ORDER BY t2.count DESC;

当我对数据库运行这个查询时(PGAdmin 查看数据 - 查看所有行)我得到了想要的结果

author | thumbnail_url | feed_id   |
user1  | thumb 1       | feed_id 1 | 
user1  | thumb 2       | feed_id 2 |
user1  | thumb 3       | feed_id 3 |
user2  | thumb 1       | feed_id 1 |
user2  | thumb 2       | feed_id 2 | and so on... 

然而,当我尝试取回结果时,使用我的 REST(Spring Boot),我得到以下信息

{
  "username" : "user1",
  "popularPhotos" : [ {
    "feedId" : feed_id 3,
    "thumbnailUrl" : "thumb 3"
  }, {
    "feedId" : feed_id 3,
    "thumbnailUrl" : "thumb 3"
  }, {
    "feedId" : feed_id 3,
    "thumbnailUrl" : "thumb 3"
  } ]
}

这是通过以下方式生成的;

用户.Java

@Entity
@Table(name = "user_details")
public class User {

    @Id
    @NotNull @NotEmpty
    @JsonView(UserView.Summary.class)
    private String username;

    @JsonView(UserView.Summary.class)
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "username")
    public List<UserPopularPhotos> popularPhotos;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }   

    public List<UserPopularPhotos> getPopularPhotos(){
        return popularPhotos;
    }

    public void setPopularPhotos(List<UserPopularPhotos> popularPhotos){
        this.popularPhotos = popularPhotos;
    }

UserPopularPhotos

@Entity
@Table(name = "user_popular_photos")
@Immutable
public class UserPopularPhotos {

    @Id
    @Column(name = "author", insertable = false, updatable = false)
    @JsonIgnore
    public String username;

    @JsonView(UserView.Summary.class)
    @Column(name = "id", insertable = false, updatable = false)
    public Integer feedId;

    @JsonView(UserView.Summary.class)
    @Column(name = "thumbnail_url", insertable = false, updatable = false)
    public String thumbnailUrl;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getFeedId(){
        return feedId;
    }
    public void setFeedId(Integer feedId){
        this.feedId = feedId;
    }

    public String getThumbnailUrl() {
        return thumbnailUrl;
    }

    public void setThumbnailUrl(String thumbnailUrl) {
        this.thumbnailUrl = thumbnailUrl;
    }
}

我在这里遗漏了什么,我无法解释为什么 PGAdmin 中的查询返回正确的结果但 API 查询多次返回相同的结果(该用户的顶部条目)?

最佳答案

@Id 注释不在 user_popular_photos View 的唯一标识符上。将其从用户名中删除并添加到 feedId。

UserPopularPhotos.java

@Entity
@Table(name = "user_popular_photos")
@Immutable

public class UserPopularPhotos {

@Column(name = "author", insertable = false, updatable = false)
@JsonIgnore
public String username;

@Id
@JsonView(UserView.Summary.class)
@Column(name = "id", insertable = false, updatable = false)
public Integer feedId;

@JsonView(UserView.Summary.class)
@Column(name = "thumbnail_url", insertable = false, updatable = false)
public String thumbnailUrl;

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public Integer getFeedId(){
    return feedId;
}
public void setFeedId(Integer feedId){
    this.feedId = feedId;
}

public String getThumbnailUrl() {
    return thumbnailUrl;
}

public void setThumbnailUrl(String thumbnailUrl) {
    this.thumbnailUrl = thumbnailUrl;
}

进行此更改会从 API 获得所需的返回结果

关于postgresql - Postgres View 在执行 SQL 时返回正确的行,但使用 REST 查询多次返回一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44948589/

相关文章:

javascript - 使用 Knex 仅增加 postgres 数据库中的最低条目

postgresql - Postgres : index on cosine similarity of float arrays for one-to-many search

java - 为什么错误的路径注释不会使 Jersey 的 REST API 崩溃?

forms - Spring MVC Restful 应用程序 : Redirect a form result to another page

java - 集会休息API : Java code to fetch userStory/TestCases/Defect Count for a given project

java - Spring Autowiring 与继承

java - Oauth 2.0 - 单个资源服务器但多个客户端应用程序

java - 如何从数据库存储和读取公钥?我正在使用 postgresql 和 java

postgresql - 日志传送错误postgres

java - 如何动态确定运行时使用的服务类