2010-01-28 1 views
7

Ho una classe di entità chiamata "Gruppo" e NetBeans mi avvisa "Il nome della tabella di entità è una parola chiave QL persistenza di Java riservata".Utilizzo di parole chiave JPQL riservate con JPA

Un caso simile sarebbe l'uso di parole chiave SQL riservate.

Questo nome sarà sfuggito? L'uso di un nome di tabella diverso risolverebbe il problema @Table (name = "otherName"). O dovrei rinominare la classe?

risposta

11

Questo nome sarà sfuggito?

Non c'è nulla nelle specifiche APP che dice così, se il vostro provider lo fa, questo è provider specifico.

sarebbe l'uso di un diverso nome della tabella di risolvere il problema @Table (name = "otherName")

Ovviamente, sarebbe (a patto che non si usare un'altra parola chiave riservata, naturalmente,). Ma se si utilizza un provider JPA 2.0, esiste un modo standard per ottenere un nome di oggetto db fuggito, con doppi apici:

@Table(name="\"Group\"") 

In JPA 1.0, non è standard niente, dipende dal vostro provider JPA. Ad esempio, Hibernate usa backticks:

@Table(name="`Group`") 

O dovrei rinominare la classe?

No. Il nome tabella di un'entità è impostato per default sul nome dell'entità ma è possibile controllarlo utilizzando l'annotazione @Table come si è visto. Non è quindi necessario modificare il nome della classe della propria entità.

+2

Se si utilizzano citazioni del genere, non sarà possibile creare alcuna tabella di combinazione (ad esempio OneToMany relations) ("Group" _Members f.e. è un nome non valido). Questa soluzione è un trucco, e io raccomanderei di non usare nomi riservati per le tabelle. I nomi dei campi pongono meno problemi. – Steven

4

Non è necessario rinominare la classe - e non si dovrebbe - il nome scelto riflette il dominio nel modo migliore, e non si dovrebbe cambiarlo a causa di limitazioni di strumenti o di strutture, nel caso lo strumento/framework fornisce un modo per evitare lo "scontro". JPA fornisce un modo.

+0

No, l'elemento nome di '@Entity (nome" pippo ")' è un'altra cosa, viene utilizzato per definire il nome da utilizzare nelle query JPQL. Ha a che fare con oggetti di database. –

+0

corretto. (15rr) – Bozho