エンティティクラスとテーブル名

「@Tableでテーブル名を指定しなければクラス名がテーブル名になる」というは正確ではなないと言いたかったのですが、うまく説明できたようなできなかったような...。
ちょっとまとめてみます。エンティティクラスを作るときって、意識する名称が3つあるってことなのかなと思います。クラス名とエンティティ名とテーブル名です。これに関するConfiguration by Exceptionのルールは2つです。

  • エンティティ名が明示的に指定されない場合、エンティティ名はパッケージ名なしのクラス名と同じ
  • テーブル名が明示的に指定されない場合、テーブル名は(クラス名ではなく)エンティティ名と同じ

つまりパターンは4種類あります。

1.エンティティ名もテーブル名も明示的に指定されない場合

@Entity
public class Emp {
  //...
}

エンティティ名: Emp
テーブル名: EMP
クラス名: Emp


2.エンティティ名のみ明示的に指定される場合

@Entity(name = "Emp")
public class Employee {
  //...
}

エンティティ名: Emp
テーブル名: EMP
クラス名: Employee


3.テーブル名のみ明示的に指定される場合

@Entity
@Table(name="EMP")
public class Employee {
  //...
}

エンティティ名: Employee
テーブル名: EMP
クラス名: Employee


4.エンティティ名とテーブル名が明示的に指定される場合

@Entity(name="Hoge")
@Table(name="EMP")
public class Employee {
  //...
}

エンティティ名: Hoge
テーブル名: EMP
クラス名: Employee