Spring Boot+Hibernate实体类报错:No identifier specified for entity排查
解决Hibernate
No identifier specified for entity 错误 嘿,我一眼就发现问题所在了——你的@Id注解用错了包!
看你的实体类代码,你同时导入了org.springframework.data.annotation.Id和javax.persistence.*,但Hibernate(JPA的实现框架)只认JPA规范定义的javax.persistence.Id注解,而org.springframework.data.annotation.Id是Spring Data专为MongoDB这类非关系型数据库设计的注解,这就导致Hibernate完全识别不出你的主键字段,所以才会抛出No identifier specified for entity的错误。
解决步骤:
- 删掉
import org.springframework.data.annotation.Id;这行导入语句,因为你已经导入了javax.persistence.*,此时@Id会自动引用正确的JPA注解。 - (可选)如果担心IDE自动导错包,也可以直接把
@Id写成@javax.persistence.Id,明确指定注解的来源,彻底避免混淆。
修改后的实体类代码示例:
package com.example.demo.model; import javax.persistence.*; @Entity @Table(name="CheckRes") public class CheckRes { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long ID; @Column(name="Check") private String Check; public CheckRes() { } public CheckRes(String check) { Check = check; } public long getID() { return ID; } public void setID(long ID) { this.ID = ID; } public String getCheck() { return Check; } public void setCheck(String check) { Check = check; } }
额外提醒:
你的@Column(name="Check")里的Check是SQL的保留关键字(比如MySQL、SQL Server等主流数据库都将其列为保留字),后续执行SQL操作时很可能会出现语法错误。建议把列名改成check_content、check_item这类非关键字,或者根据数据库的语法规则用特殊符号包裹(比如MySQL用反引号`Check`,SQL Server用[Check])。
内容的提问来源于stack exchange,提问作者user1907849
相关产品推荐
相关产品推荐

