web-dev-qa-db-ja.com

JPAを使用する場合、@ Entityと@Tableのname引数の違いは何ですか?

JPA2と両方を使用しています@Entityおよび@Tableにはname属性があります。e。 g .:

@Entity(name="Foo")
@Table (name="Bar")
class Baz

私は何を使うべきですか、どれがオプションですか?

私の特定のケースでは、クラスUserとクラスGroupがありますが、これらはSQLの予約語であるため、追加の要件があります(理解できる限り)。

クエリを作成するときに、実際のソリューションはどのように見え、どの名前でエンティティを参照しますか?

更新しました。追加した name="GROUPS"Groupの両方の注釈に追加し、Userにも同じことをしましたが、今ではこのエラーが発生します。

Exception Description: The table [USERS] is not present in this descriptor.
Descriptor: RelationalDescriptor(example.Group --> [DatabaseTable(GROUPS)])

そして

Internal Exception: Java.sql.SQLException: Table not found in statement [SELECT ID, MAXIMUMROLE, MEMBERSHIPS_ID FROM USERS]
50
soc

@Tableはオプションです。 @EntityはPOJOクラスにエンティティとして注釈を付けるために必要ですが、name属性は必須ではありません。

クラスがある場合

 @Entity
 class MyEntity {}

MyEntity」という名前のテーブルが作成され、エンティティ名はMyEntityになります。 JPQLクエリは次のようになります。

 select * from MyEntity

JPQLでは、常にエンティティ名を使用します。デフォルトではクラス名です。

クラスがある場合

 @Entity(name="MyEntityName")
 @Table(name="MyEntityTableName")
 class MyEntity {}

次に、名前MyEntityTableNameを持つテーブルが作成され、エンティティ名はMyEntityNameです。

JPQLクエリは次のようになります。

 select * from MyEntityName
79

@EntitynameはJPA-QLクエリ用で、デフォルトはパッケージなしのクラス名(またはJava lingo)、変更する場合は、クエリを作成するときにこの名前を使用する必要があります。

@Tablenameは、このエンティティが保存されるテーブル名です。

25

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

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

注:@Tableを使用しない場合、休止状態はデフォルトで@Entityがテーブル名であると見なします

@Entity    
@Table(name = "emp")     
public class Employee implements Java.io.Serializable { }
1
Bhuwan Tripathi