2010-01-28 17 views
7

Tengo una clase de entidad llamada "Grupo" y NetBeans me advierte "El nombre de la tabla de entidad es una palabra clave reservada Java Persistence QL".Uso de palabras clave JPQL reservadas con JPA

Un caso similar sería el uso de palabras clave SQL reservadas.

¿Se escapó este nombre? ¿El uso de un nombre de tabla diferente resolvería el problema @Table (name = "otherName")? ¿O debería cambiar el nombre de la clase?

Respuesta

11

¿Se escapó este nombre?

hay nada en la especificación JPA que lo dice, si su proveedor lo hace, esto es específico del proveedor.

¿El uso de un nombre de tabla diferente de resolver el problema @Table (name = "otherName")

Obviamente, sería (siempre y cuando no se utilice otra palabra clave reservada por supuesto) Sin embargo, si está utilizando un proveedor JPA 2.0, hay una forma estándar para obtener un nombre de objeto db escapado, con comillas dobles:

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

En JPA 1.0, no hay nada estándar, que depende de su proveedor JPA. Por ejemplo, Hibernate usa acentos abiertos:

@Table(name="`Group`") 

O debería cambiar el nombre de la clase?

No. El nombre de la tabla de una entidad por defecto es el nombre de la entidad, pero se puede controlar mediante la anotación @Table como vimos. Por lo tanto, no es necesario cambiar el nombre de clase de su entidad.

+2

Si utiliza comillas como esa, no se creará ninguna tabla de combinación (es decir, relaciones OneToMany) ("Grupo" _Members, es decir, es un nombre no válido). Esta solución es un truco, y yo recomendaría no usar nombres reservados para Tablas. Los nombres de campo plantean un problema menor. – Steven

4

No tiene que cambiar el nombre de la clase, y no debe hacerlo, el nombre que ha elegido refleja su dominio de la mejor manera y no debe cambiarlo debido a limitaciones de herramientas o marcos, en caso de que la herramienta/framework proporciona una forma de evitar el "choque". JPA proporciona tal manera.

+0

No, el elemento de nombre de '@Entity (name" foo ")' es otra cosa, se usa para definir el nombre que se utilizará en las consultas JPQL. Tiene que ver con objetos de base de datos. –

+0

corregido. (15chr) – Bozho

Cuestiones relacionadas