エンティティクラスとテーブル名
「@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