Sql server @Spring Crudepository中的NamedQuery-SQLServerException:列名无效';id';
我正在调用一个服务,该服务在crudepository中使用@NamedQuery返回域对象。我看到了错误Sql server @Spring Crudepository中的NamedQuery-SQLServerException:列名无效';id';,sql-server,spring,hibernate,jpa,spring-data,Sql Server,Spring,Hibernate,Jpa,Spring Data,我正在调用一个服务,该服务在crudepository中使用@NamedQuery返回域对象。我看到了错误 2017-04-05 16:43:16.063 WARN 14240 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 207, SQL State: S0001 2017-04-05 16:43:16.065 ERROR 14240 --- [ main] o.h.
2017-04-05 16:43:16.063 WARN 14240 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 207, SQL
State: S0001
2017-04-05 16:43:16.065 ERROR 14240 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Invalid column name
'id'.
2017-04-05 16:43:16.076 INFO 14240 --- [ main] utoConfigurationReportLoggingInitializer :
... 27 common frames omitted
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'id'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:232) ~[mssql-jd
bc-6.1.0.jre8.jar!/:na]
我不理解此错误,因为我的数据库表中没有列“id”。不知道发生了什么事
我的桌子是空的
CREATE TABLE [dbo].[tb_changes_reports_v2](
[reportID] [int] NOT NULL,
[global_checksum] [int] NULL,
[specific_checksum] [int] NULL,
[batch] [int] NULL,
[pushed] [bit] NULL,
[compare_date] [datetime] NOT NULL,
[ver] [bigint] NULL
) ON [PRIMARY]
GO
我的@Entity看起来像
@Entity(name = "ChangesReports")
@Table(name="tb_changes_reports_v2")
@NamedQuery(name = "ChangesReports.findByTheReportId", query = "from ChangesReports c where c.reportId = ?1")
public class ChangesReports extends AbstractPersistable<Long> {
private static final long serialVersionUID = -452961221197917532L;
@Column(name="reportID", unique = true)
private Long reportId;
My @Repository looks like
@Repository
public interface ChangesReportsRepository extends CrudRepository<ChangesReports, Long>, ChangesReportsRepositoryCustom {
ChangesReports findByTheReportId(Long reportId);
@Override
public ChangesReports findByTheReportId(Long reportId) {
return changesReportsRepository.findByTheReportId(reportId);
}
我正在使用这些@Bean定义来自动连接我的Bean
@Bean
public ChangesReportsServiceImpl changesReportsServiceImpl() {
ChangesReportsServiceImpl changesReportsServiceImpl = new ChangesReportsServiceImpl();
return changesReportsServiceImpl;
}
@Bean
public ChangesReportsRepositoryImpl changesReportsRepository() {
ChangesReportsRepositoryImpl changesReportsRepositoryImpl = new ChangesReportsRepositoryImpl();
return changesReportsRepositoryImpl;
}
同样,我不确定为什么会收到“无效列名'id'。因为没有名为'id'的列。任何想法都非常感谢。仅供参考,我的答案是修改我的表,使其具有AbstractPersistable接口所需的ID列
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tb_changes_reports_v2](
[ID] [int] IDENTITY(1,1) NOT NULL,
[reportID] [int] NOT NULL,
[global_checksum] [int] NULL,
[specific_checksum] [int] NULL,
[batch] [int] NULL,
[pushed] [bit] NULL,
[compare_date] [datetime] NOT NULL,
[ver] [bigint] NULL
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
抽象持久性呢?该类是否有Id列?不,没有Id列。谢谢-这是一个非常好的提示-我添加了一个id列,问题已经解决。@user619804请将其作为答案发布,以便其他用户可以更轻松地找到它