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

Kafka监听器集成JPA启动崩溃问题求助

数据库集成Kafka监听器启动崩溃问题解决

尝试将数据库集成到Kafka监听器中时,程序启动即崩溃,核心错误为Hibernate抛出的org.hibernate.AnnotationException: No identifier specified for entity。

相关代码

实体类LogQuestor

package br.com.ottimizza.ListenerServico.domain.model;

import java.math.BigInteger;
import java.util.Date;

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

import org.springframework.data.annotation.Id;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.Data;

@Data
@Entity
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "ot_log_questor_post_baixa")
public class LogQuestor {
  
  @Id
  @Column
  @GeneratedValue(strategy = GenerationType.AUTO)
  private BigInteger id;

  @Column
  Date ot_created_at;
  
  @Column
  Body ot_objeto_questor;
  
  @Column
  String ot_objeto_texto_questor;

  @Column
  String ot_status_req;

  @Column
  String ot_token_usuario;

} 

Body实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Body implements Serializable {

  private static final long serialVersionUID = 1L;
  
  String fileLink;

  String zenTokenUsuario;

  String domain;

  String filename;

  String cnpj;

  HashMap<String, String> propriedades;

}

Repository接口

package br.com.ottimizza.ListenerServico.repository;

import java.math.BigInteger;
import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import br.com.ottimizza.ListenerServico.domain.model.LogQuestor;

@Repository
public interface LogQuestorRepository extends JpaRepository<LogQuestor, BigInteger> {
  
  public Optional<LogQuestor> findById(BigInteger id);
}

保存方法

import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;

  @Autowired
  LogQuestorRepository repository;

  public void saveToDB(String message, String status, String token) {
    LogQuestor reqToSv = new LogQuestor();
    //assignment of carachteristics
    repository.save(reqToSv);
  } 

注:代码省略了部分无关内容,确认无错误。

启动错误日志

2022-10-21T20:32:34.903633+00:00 app[web.1]: 2022-10-21 20:32:34.903  WARN 4 --- [           main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'logQuestorRepository' defined in br.com.ottimizza.ListenerServico.repository.LogQuestorRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Cannot resolve reference to bean 'jpaMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: br.com.ottimizza.ListenerServico.domain.model.LogQuestor
2022-10-21T20:32:34.904798+00:00 app[web.1]: 2022-10-21 20:32:34.904  WARN 4 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'services': Unsatisfied dependency expressed through field 'tareffa'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'br.com.ottimizza.ListenerServico.client.ClientTareffa': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'logQuestorRepository' defined in br.com.ottimizza.ListenerServico.repository.LogQuestorRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Cannot resolve reference to bean 'jpaMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: br.com.ottimizza.ListenerServico.domain.model.LogQuestor
2022-10-21T20:32:34.905820+00:00 app[web.1]: 2022-10-21 20:32:34.904  INFO 4 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'

问题原因及修复

核心错误为**org.hibernate.AnnotationException: No identifier specified for entity**,原因是LogQuestor实体类错误使用了org.springframework.data.annotation.Id注解,Hibernate作为JPA实现,只能识别JPA标准的主键注解。

修复方式:将LogQuestor类中的import org.springframework.data.annotation.Id替换为import javax.persistence.Id,修改后的主键代码片段如下:

import javax.persistence.Id;

// ...

@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
private BigInteger id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:40:31