IT初学者部

プログラミングに関することを中心に、備忘録として残していきます。

@Entityをつけているにも関わらず、「org.hibernate.AnnotationException: No identifier specified for entity:」的なエラーが表示される

はじめに

JPARepositoryを利用してCRUD処理の作成を確認しているんですが、タイトルのようなエラーが発生する場合に確認した方がいい箇所と対応について残しておきます。

ソースコード

Entityクラス

~~~(省略)

import javax.persistence.Entity;

import lombok.Data;

@Entity
@Data
public class Test {

    public int id;

    public String name;
}

コンパイル後の実行時にこんな感じのエラーが発生し、Springboot アプリケーションの実行ができない状況になります。

Error creating bean with name 'entityManagerFactory' defined in class path resource

確認箇所① @Idがついているかどうか

idのところに@Idをつけ、識別させる必要があります。

下記ファイルのように、idの前に@Idをつけましょう。

import javax.persistence.Entity;
import javax.persistence.Id;

import lombok.Data;

@Entity
@Data
public class Test {

    @Id (ココ!!!)
    public int id;

    public String name;
}

確認箇所② importがあっているかどうか

~~~

import javax.persistence.Entity;

import org.springframework.data.annotation.Id;

import lombok.Data;

@Entity
@Data
public class Test {

    @Id
    public int id;

    public String name;
}

上記パスの場合、@Idをつけていてもエラーとなります。importするのは「import javax.persistence.Id;」なのが正しいので、以下のように変更してあげましょう。import文を直接直してもいいですし、@Idを一回削除してからもう一度書いてもいいです。Eclipseで自動で選択できるので。

import javax.persistence.Entity;
import javax.persistence.Id;

import lombok.Data;

@Entity
@Data
public class Test {

    @Id
    public int id;

    public String name;
}

これでSpringbootアプリケーションとして実行すると問題なく起動できます。

おわりに

JPAの使い方がなんとなくわかってきたこの頃です。JDBCも含め組み合わせて使おうかなと思ってます。できるのかは分かりませんが。