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]
@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
@Entity
のnameはJPA-QLクエリ用で、デフォルトはパッケージなしのクラス名(またはJava lingo)、変更する場合は、クエリを作成するときにこの名前を使用する必要があります。
@Table
のnameは、このエンティティが保存されるテーブル名です。
@Entity
は、これがエンティティまたはテーブルであることを示すためにモデルクラスで役立ちます
@Table
は、別の名前を指定する場合にテーブルに特定の名前を指定するために使用されます
注:@Table
を使用しない場合、休止状態はデフォルトで@Entity
がテーブル名であると見なします
@Entity
@Table(name = "emp")
public class Employee implements Java.io.Serializable { }