61 votes

Ce qui ' s différencie l’argument name dans @Entity @Table lorsque vous utilisez App ?

Je suis en utilisant JPA2 et les deux @Entity et @Table ont un name d'un attribut, d'e. g.:

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

Que dois-je utiliser, quels sont ceux qui sont en option?

Dans mon cas précis j'ai une classe User , et une classe Group, qui ont des exigences supplémentaires (comme je le comprends) parce qu'ils sont des mots réservés SQL.

Comment une solution de travail ressemblent et avec qui nom, je me réfère à l'entité lors de l'écriture de requêtes?

Mis à jour. J'ai ajouté name="GROUPS" pour les deux annotations en Group et a fait de même pour User, mais maintenant j'ai cette erreur:

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

et

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

89voto

Dhanush Gopinath Points 1638

@Table est facultatif. @Entité est nécessaire pour l'annotation d'une classe POJO comme une entité, mais le nom de l'attribut n'est pas obligatoire.

Si vous avez une classe

 @Entity
 class MyEntity {}

Un tableau avec le nom "MyEntity" sera créé et le nom de l'Entité sera MyEntity. Votre requête JPQL serait:

 select * from MyEntity

En JPQL vous utilisez toujours le nom de l'Entité et par défaut c'est le nom de la classe.

si vous avez une classe

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

alors un tableau avec le nom MyEntityTableName est créé et le nom de l'entité est MyEntityName.

Votre requête JPQL serait :

 select * from MyEntityName

29voto

Maurício Linhares Points 19468

Le nom de `` est pour les requêtes JPA-QL, il prend par défaut le nom de classe sans paquet (ou nom de la classe non qualifié, dans le jargon du Java), si vous le changer il faut s’assurer que vous utilisez ce nom lors de la génération de requêtes.

Le nom de `` est le nom de la table où cette entité est enregistrée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X