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
相关产品推荐
相关产品推荐

