Springboot jpa:实体无法绑定不在表列中的自定义查询中的数据

Posted

技术标签:

【中文标题】Springboot jpa:实体无法绑定不在表列中的自定义查询中的数据【英文标题】:Springboot jpa : Entity can't bind data from custom query that's not in table column 【发布时间】:2021-12-13 10:51:22 【问题描述】:

我使用java Springboot JPA,mysql

我需要从我的自定义查询中获取数据,并且某些数据(nextBno、beforeBno 等)不是 DB 表列。它们来自我的查询,如下所示:

            (
                    SELECT boardNo FROM table_news
                    WHERE boardNo IN (
                        SELECT MIN(boardNo)
                        FROM table_news A
                        WHERE status=0 AND boardNo > 65
                    )
                ) AS nextBNo,

所以当我从查询中获取数据时,数据获取得很好,因为查询本身很好。但结果填充为null。 我想我应该从 JPA 模型(实体)文件中修复一些东西,以便数据可以很好地绑定,但不知道具体如何。 我尝试添加 @Transient 注释,但它似乎不起作用。

NewsModel.java


@Data 
@Entity
@Table(name = "table_news")
@NoArgsConstructor
@AllArgsConstructor
@DynamicInsert
@DynamicUpdate
public class NewsModel 

    @Id
    @Column(name = "boardNo")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer boardNo;

   (...)

    @Transient
    private Integer nextBNo;
    @Transient
    private Integer beforeBNo;
    
    (...)

NewsResponse.java

@Data
@NoArgsConstructor
@AllArgsConstructor
public class NewsResponse 

    private Integer boardNo;

    (...)

    @Transient
    private Integer nextBNo;
    @Transient
    private Integer beforeBNo;

    (...)

    public NewsResponse(NewsModel model)
        this.boardNo = model.getBoardNo();
 
        (...)
        this.nextBNo = model.getNextBNo();
        this.beforeBNo = model.getBeforeBNo();

    

NewsRepository.java -- 接口

@Repository
public interface NewsRepository extends JpaRepository<NewsModel, Integer> 

    @Query(value = "(MY CUSTOM QUERY)", nativeQuery = true)
    NewsModel getNewsWithNextAndBefore(Integer boardNo);

【问题讨论】:

尝试使用这个 jpa 查询,从 NewsModel 模型中选择 model.boardNo,其中 model.boardNo in (select min(m.boardNo) from NewModel m where m.status = 0 and m.boardNo > 65) ,返回类型是 Integer 而不是 NewsModel 并删除 nativeQuery 参数 【参考方案1】:

您是否尝试过在实体类下提及“架构”名称?也许表格没有正确映射,这可能是个问题。

【讨论】:

以上是关于Springboot jpa:实体无法绑定不在表列中的自定义查询中的数据的主要内容,如果未能解决你的问题,请参考以下文章

JPA实体类与应用不在一个包导致错误:java.lang.IllegalArgumentException: Not a managed type: class AAA

springboot jpa oracle实体类中配置注解无法在数据库中生成注释的一种解决方式

解决Springboot项目中jpa扫描不到实体的问题

如何使用外键保存实体而不在 JPA 中加载相关实体?

无法将 Spring Data MongoDB + Spring Data JPA 与 Spring Boot 一起使用

无法使用 Spring Boot 更新现有实体