Spring Boot起動時に「〜 has no identifier (every '@Entity' class must declare or inherit at least one '@Id' or '@EmbeddedId' property) 〜」というエラーが発生したので、原因と解決方法について書いています。
※ 本ページはプロモーションが含まれています。
◾️動作環境とバージョン情報です
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アプリ開発入門