@Entityおよび@TableのName属性


85

名前属性が@Entityと@Tableの両方にあるため、疑問があります。

たとえば、name属性に同じ値を設定できます

@Entity(name = "someThing")
@Table(name = "someThing")

同じクラスに異なる名前を付けることもできます

 @Entity(name = "someThing")
 @Table(name = "otherThing")

これら2つの違いと、両方に同じ属性がある理由を誰かに教えてもらえますか?


@Entityは非推奨になりました。
フィリップレゴ2017

8
@PhilipRego:Hibernateの\ @Entity(つまり、org.hibernate.annotations.Entity)は非推奨ですが、JPAの\ @Entity(つまり、javax.persistence.Entity)は正常に機能しています。
David Siegal 2017年

回答:


106
@Entity(name = "someThing") => this name will be used to name the Entity
@Table(name = "someThing")  => this name will be used to name a table in DB

したがって、最初のケースでは、テーブルとエンティティの名前が同じになります。これにより、HQLまたはJPQLの作成中に、エンティティと同じ名前のテーブルにアクセスできるようになります。

第2の場合にはあなたが与えられた名前を使用する必要があり、クエリの書き込み中に@Entityで指定し、名前@Tableを DB内のテーブルに名前を付けるために使用されます。

したがって、HQLでは、someThingはDB内の他のThingを参照します。


19

@Entity(name = "someThing")=>この名前は、ドメインを識別するために使用されます。この名前は、hqlクエリによってのみ識別されます。つまり、ドメインオブジェクトの名前です。

@Table(name = "someThing") =>この名前は、ドメインオブジェクトによって参照されるテーブルに使用されます。つまり、テーブルの名前です。


16

@Entity これがエンティティまたはテーブルであることを示すためにモデルクラスで役立ちます

@Table 別の名前を指定する場合は、テーブルに特定の名前を指定するために使用されます

注:あなたが使用していない場合は@Tableそれは考える冬眠その後、@Entityデフォルトとして、テーブル名です@Entity必見

@Entity    
@Table(name = "emp")     
public class Employee implements java.io.Serializable    
{

}

2

@Tableのname属性は、実際のテーブル名です。@Entitiyの名前は、同じ名前の@Entityクラスが2つあり、クエリを実行するときにそれらを区別する方法が必要な場合に役立ちます。


3
同じ名前のエンティティが2つあるのはいつですか。クラス名が等しいが、クラスが異なるパッケージにある(修飾名が異なる)場合ですか?
croraf 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.