Spring Data JPA 查询从一个连接表中选择所有值

标签 spring postgresql spring-boot spring-data-jpa jpql

我在使用 Spring Data JPA 从一个表和其他几个列中选择所有值时遇到问题。我正在使用 PostgreSql 数据库,当我通过 PgAdmin 发送查询时,我得到了我想要的值,但是如果我在 Spring Boot Rest 中使用它,则只返回一个表值(子查询不工作)。我做错了什么?

@Query(value = "SELECT item.*, MIN(myBid.bid) AS myBid, (SELECT MIN(lowestBid.bid) AS lowestbid FROM bids lowestBid WHERE lowestBid.item_id = item.item_id GROUP BY lowestBid.item_id) FROM item JOIN bids myBid ON item.item_id = myBid.item_id WHERE myBid.user_id = :user_id GROUP BY item.item_id", nativeQuery = true)
public List<Item> findAllWithDescriptionQuery(@Param("user_id") UUID userId);

添加项目类

@Data
@Entity(name = "item")
public class Item {
    @Id
    @GeneratedValue
    private UUID itemId;

    @NotNull
    @Column(name = "title")
    @Size(max = 255)
    private String title;

    @NotNull
    @Column(name = "description")
    private String description;


    @NotNull
    @Column(name = "created_user_id")
    private UUID createdUserId;
}

最佳答案

由于为计算自己出价的 MIN 和其他出价的 MIN 而执行的数据库内聚合,您的 native 查询的结果不能简单地映射到实体。特别是,您的 Item 实体不携带任何属性来保存 myBidlowestbid

因此,您希望从查询方法返回的是 Projection . 投影只是一个接口(interface),其 getter 方法与您的查询返回的字段完全匹配:

public interface BidSummary {

  UUID getItem_id();

  String getTitle();

  String getDescription();

  double getMyBid();

  double getLowestbid();

}

注意查询方法如何返回 BidSummary 投影:

@Query(value = "SELECT item.*, MIN(myBid.bid) AS myBid, (SELECT MIN(lowestBid.bid) AS lowestbid FROM bids lowestBid WHERE lowestBid.item_id = item.item_id GROUP BY lowestBid.item_id) FROM item JOIN bids myBid ON item.item_id = myBid.item_id WHERE myBid.user_id = :user_id GROUP BY item.item_id", nativeQuery = true)
public List<BidSummary> findOwnBids(@Param("user_id") UUID userId);

关于Spring Data JPA 查询从一个连接表中选择所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52161241/

相关文章:

java - ActiveMQ NIO 配置

spring - 如何使用 MockMvc 测试 spring Controller 方法?

PostgreSQL - 在 Cloud9 上以模式权限创建表

java - 如何在 Spring Boot 中记录 Rest Web 服务所花费的时间?

java - Spring MVC中的多个@RequestMapping(值、方法对)

java - Spring MVC 应用

sql - 根据列值过滤或分离 SQL 查询

python - Postgresql:如何从受日期约束的表中删除行?

java - 存储库未扩展 JpaRepository

spring-boot - Keycloak:获取身份提供者信息