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实体类中配置注解无法在数据库中生成注释的一种解决方式
无法将 Spring Data MongoDB + Spring Data JPA 与 Spring Boot 一起使用