You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot操作Oracle时Hibernate报‘no identifier specified’错误咨询

解决Hibernate的“No identifier specified for entity”错误

嘿,我一眼就揪出了导致这个报错的核心问题——你用错了@Id注解的包!下面一步步给你讲清楚怎么修复:

1. 替换错误的@Id注解包

你现在导入的是org.springframework.data.annotation.Id,这个注解是给Spring Data的非关系型数据库(比如MongoDB、Redis)用的。而Hibernate作为JPA的实现,只认JPA规范里的@Id注解。

修改实体类的@Id导入:
把:

import org.springframework.data.annotation.Id;

换成对应版本的JPA注解:

// Spring Boot 2.x及以下版本(Java EE规范)
import javax.persistence.Id;

// Spring Boot 3.x及以上版本(Jakarta EE规范)
import jakarta.persistence.Id;

2. 修正Repository的泛型类型

你的user_id字段是Long类型,但Repository里写的是JpaRepository<hindalco_model,Integer>,这会导致后续保存操作出现类型不匹配问题,赶紧改成:

public interface hindalco_repository extends JpaRepository<hindalco_model, Long> {
}

3. 适配Oracle的自增策略(可选但更规范)

你已经用序列和触发器实现了自增,其实可以把GenerationType.IDENTITY换成更适配Oracle的SEQUENCE策略,避免潜在的兼容性问题:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id_seq")
@SequenceGenerator(name = "user_id_seq", sequenceName = "user_id", allocationSize = 1)
@Column(name="user_id", updatable=false, nullable=false)
private Long user_id;

这里sequenceName要和你创建的序列名保持一致(你的触发器里用的是user_id.nextval,所以序列名就是user_id)。

额外的最佳实践建议(非报错原因,但提升代码质量)

  • Java类名遵循大驼峰规范:把hindalco_model改成HindalcoModel
  • 变量名用小驼峰:user_id改成userId,同时保留@Column(name="user_id")来映射数据库字段即可

修改后的完整实体类示例

package com.sid.demo.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Table(name="user_registration")
@Entity
public class HindalcoModel {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id_seq")
    @SequenceGenerator(name = "user_id_seq", sequenceName = "user_id", allocationSize = 1)
    @Column(name="user_id", updatable=false, nullable=false)
    private Long userId;
    
    @Column(name="user_name")
    private String userName;
    
    @Column(name="email")
    private String email;
    
    @Column(name="password")
    private String password;

    // getter、setter及toString方法省略
}

为什么会出现这个错误?
Hibernate在初始化实体管理器时,会扫描所有标注@Entity的类,寻找JPA规范定义的@Id注解来识别主键。你用了Spring Data的@Id,Hibernate完全识别不了,所以就抛出了“No identifier specified for entity”的异常。

内容的提问来源于stack exchange,提问作者SAMUEL BARKLEY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:08:50