列名在spring boot中无效

Posted

技术标签:

【中文标题】列名在spring boot中无效【英文标题】:The column name is not valid in springboot 【发布时间】:2021-12-30 18:19:27 【问题描述】:

我编写了本机查询,但出现错误:

列名 covidSymptomId 无效。

怎么了?

There are table in mssql

Error picture

CovidSymptom.java

 @Data
 @AllArgsConstructor
 @NoArgsConstructor
 @Entity
 @Table(name="CovidSymptom")
 public class CovidSymptom 

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "covidSymptomId")
private int id;

@ManyToOne
@JoinColumn(name = "covidId")
private Covid covidSymptom;

@Column(name = "symptom")
private String symptom;

CovidSymptomDao.java

@Query(nativeQuery = true,value = "Select symptom From CovidSymptom GROUP BY symptom order by count(covidSymptomId) desc")
List<CovidSymptom> getMost3SymptomOffCovid();

【问题讨论】:

根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。 我会尝试删除 covidSymptomId 的列名注释,并仅使用当您使用 @id 注释时该列将使用的默认 ID 名称 您会为该列显示什么值?您正在按不同的列进行聚合,因此要么选择 COUNTMIN 等聚合,要么删除关联。 【参考方案1】:

您需要包含查询中映射的所有列。所以:

Select covidSymptomId, symptom....

【讨论】:

现在我得到“列 'CovidSymptom.covidSymptomId' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。”这个错误。 @Kadri 那是因为您正在聚合,而该列不在 GROUP BY 中,所以它需要一个聚合函数【参考方案2】:

我不确定您为什么会遇到列名问题,因为您的选择查询返回“症状”(字符串)列表,而您的方法提供了“CovidSymptom”(对象)列表。

【讨论】:

以上是关于列名在spring boot中无效的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot/JPA:引用的保留字列名不起作用

如何使用 Spring Boot Security 修复 Spring Boot Webflux 应用程序中的“名称为 requestMappingHandlerAdapter 的 bean 定义无效

在 Spring Boot 应用程序中使用 API 网关时,HATEOAS 路径无效

spring boot hibernate查询无效用户错误

IDEA中Spring boot配置热部署无效问题解决方式(转)

Spring boot & Spring Security : 转发无效的 url