Spring Boot3起動時エラー「エンティティクラスの@Id」

Spring Boot起動時に「〜 has no identifier (every '@Entity' class must declare or inherit at least one '@Id' or '@EmbeddedId' property) 〜」というエラーが発生したので、原因と解決方法について書いています。

※ 本ページはプロモーションが含まれています。

動作環境とエラー内容と解決方法

最終更新日:2023/6/7

◾️動作環境とバージョン情報です
OS:macOS Big Sur(バージョン11.7.7)
開発環境:Eclipse(Pleiades All in One Java Full Edition版)
Java:Java17(OpenJDK17)

Spring Bootのバージョン3のアプリの開発中にエンティティクラスを作成したら、起動時に下記ランタイムエラーが発生しました。

〜
2023-06-06T03:21:13.498+09:00 ERROR 13058 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: Entity 'com.example.demo.HogeData' has no identifier (every '@Entity' class must declare or inherit at least one '@Id' or '@EmbeddedId' property)
2023-06-06T03:21:13.499+09:00  WARN 13058 --- [  restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Entity 'com.example.demo.HogeData' has no identifier (every '@Entity' class must declare or inherit at least one '@Id' or '@EmbeddedId' property)
〜
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-06-06T03:21:13.555+09:00 ERROR 13058 --- [  restartedMain] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Entity 'com.example.demo.HogeData' has no identifier (every '@Entity' class must declare or inherit at least one '@Id' or '@EmbeddedId' property)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770) ~[spring-beans-6.0.9.jar:6.0.9]
〜
Caused by: org.hibernate.AnnotationException: Entity 'com.example.demo.HogeData' has no identifier (every '@Entity' class must declare or inherit at least one '@Id' or '@EmbeddedId' property)
〜

このエラーが発生した時のエンティティクラス(HogeData)です。

〜
import org.springframework.data.annotation.Id;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class HogeData {
〜
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;
〜
}

解決方法ですが、@Idアノテーションのパッケージを変更したら、エラーは解消されて正常に起動・動作するようになりました。
■編集前

import org.springframework.data.annotation.Id;
■編集後
import jakarta.persistence.Id;

使う@Idクラスが違ってたのが原因でした。コンパイルエラーではなく起動時のランタイムエラーだから、ちょっと解りにくかった。

別ページでMySQL(MariaDB)と連携したSpring Boot3系のウェブアプリ開発の説明をしているので、良ければ参考にしてください。
Spring Boot3 + MySQL(MariaDB)のWebアプリ開発入門