使用 Java JPA 的自定义查询返回“NULL”

问题描述 投票:0回答:1

我目前在一个大学项目中首次体验了 JAVA SpringBoot,其中我们使用 H2 in-mem 数据库进行存储。对于统计,我想使用自定义查询来获取数据 - 这工作得很好。然而,当开始处理返回的数据时,我遇到了很多问题并且需要帮助。

我的查询返回 4 列(名称、avgTasteRating、avgDesignRating、avgPriceRating)。为了解析 Java 中的信息,我构建了一个由相同列组成的自定义实体 (WineDTO)。然而,只有名称被解析 - 由于某种原因,其余部分被转换为“null”..

有人对可能的错误或修复有任何想法吗?不胜感激!非常感谢你!!!

WineRepository.java

    @Query(value =
        "SELECT w.NAME, AVG(r.taste_rating) AS avgTasteRating, AVG(r.design_rating) AS avgDesignRating,AVG(r.price_rating) AS avgPriceRating" +
                "            FROM WINE w JOIN RATING r ON w.ID = r.wine_id" +
                "            GROUP BY w.ID, w.NAME" +
                "            ORDER BY avgTasteRating DESC", nativeQuery = true)
List<WineDTO> findWinesWithAverageRatings();

WineDTO.java

@Entity
public class WineDTO {

private String name;
private String avgTasteRating;
private String avgDesignRating;
private String avgPriceRating;
@Id
private Long id;

// constructer, set and get to follow
java spring spring-boot jpa h2
1个回答
0
投票

使用 Spring Data JPA 投影接口而不是实体,您需要定义一个投影接口,其中包含您要选择的字段。这是一个例子:

投影接口:

public interface WineDTO {

    String getName();
    Double getAvgTasteRating();
    Double getAvgDesignRating();
    Double getAvgPriceRating();
    Long getId();
}

在此界面中,方法名称应与您在查询中选择的字段名称相匹配。

JPA 存储库:

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface WineRepository extends JpaRepository<Wine, Long> {

    @Query(value =
            "SELECT w.NAME, AVG(r.taste_rating) AS avgTasteRating, AVG(r.design_rating) AS avgDesignRating, AVG(r.price_rating) AS avgPriceRating" +
                    " FROM WINE w JOIN RATING r ON w.ID = r.wine_id" +
                    " GROUP BY w.ID, w.NAME" +
                    " ORDER BY avgTasteRating DESC", nativeQuery = true)
    List<WineDTO> findWinesWithAverageRatings();
}

确保存储库中的方法返回已定义投影接口的列表(在本例中为

WineDTO
)。

请记住,Spring Data JPA 会根据名称将本机查询的结果映射到投影接口中的字段,因此接口中的名称应与本机查询中的别名匹配。

如果您想了解有关 Spring Data JPA Projections 的更多信息,请查看此处的官方文档 - https://docs.spring.io/spring-data/jpa/reference/repositories/projections.html

© www.soinside.com 2019 - 2024. All rights reserved.