2011-04-19 30 views
19

Veo un error al ejecutar la consulta sql de hibernación.¿Por qué tengo ORA-00904 incluso cuando la columna está presente?

java.sql.SQLException: ORA-00904: "table_name"."column_name": invalid identifier

Cuando abro la tabla en sqldeveloper, la columna está presente.

El error solo ocurre en PROD, no en DEV.

¿Qué debo verificar?

+1

¿Puede publicar la consulta? –

+0

Creo que el problema más grande podría ser que las columnas no llegaron a la producción db – V4Vendetta

+0

@Kaushik ... ¿descubrió la causa del problema? –

Respuesta

18

Podría ser un problema de sensibilidad de mayúsculas y minúsculas. Normalmente, las tablas y columnas no distinguen entre mayúsculas y minúsculas, pero lo estarán si usa comillas. Por ejemplo:

create table bad_design("goodLuckSelectingThisColumn" number); 
-1

Compruebe la credencial de usuario utilizada para iniciar sesión en la base de datos. (persistence.xml ??). El problema mayormente es que el nombre de usuario \ contraseña utilizado para iniciar sesión en la base de datos no tiene visibilidad para el objeto (table_name en este caso). (intente iniciar sesión en el desarrollador sql, utilizando el mismo nombre de usuario \ contraseña disponible en su origen de datos)

+0

¿No daría eso una tabla no encontrada en su lugar? SQL> seleccione colA de invalid_table_name; seleccione colA de invalid_table_name * ERROR en la línea 1: ORA-00942: la tabla o vista no existe –

+0

No hay persistence.xml. Hibernate está utilizando el origen de datos definido en la websphere – Victor

+0

No estoy diciendo que el objeto de tabla no existe. Estoy diciendo que hay un problema de visibilidad. ¿No dijo que se conectó a sqldeveloper y descubrió que todo estaba bien ... Lo único que se me ocurre es que hay una diferencia en el nombre de usuario. (esquema) –

1

¿Ha comparado las definiciones de tablas en Prod y Dev?

Y cuando lo ejecuta en SQL Developer, ¿está ejecutando la consulta en Prod (la misma base de datos que la aplicación) y con el mismo usuario?

Si hay algunas columnas adicionales que está agregando (utilizando un comando alter) y estos cambios aún no se promocionan a prod, este problema es posible.

¿Puede publicar la definición de la tabla y su consulta real?

6

Oracle arrojará ORA-00904 si el usuario ejecutor no posee los permisos adecuados para los objetos involucrados en la consulta.

0

utilizo Toad para Oracle y si la tabla es propiedad de otro nombre de usuario que el que inició la sesión como y tiene acceso para leer la tabla, es posible que tenga que añadir el propietario de la tabla original, al nombre de la tabla.

Por ejemplo, digamos que el nombre del propietario de la tabla es 'PROPIETARIO1' y ha iniciado sesión como 'USUARIO1'. Esta consulta puede darle un error ORA-00904:

select * from table_name where x='test'; 

prefijar el nombre_tabla con el propietario de la tabla eliminado el error y da resultados:

select * from 
2

Escribir el nombre de la columna en el medio comillas dobles como en " columnName ".

Si el mensaje de error muestra una mayúscula y minúscula diferente a la que escribió, es muy probable que su cliente sql haya realizado una conversión automática de mayúsculas y miniaturas para usted. Use comillas dobles para omitir eso. (Esto funciona en Squirrell Client 3.0).

3

Esto me sucedió cuando accidentalmente definí dos entidades con la misma tabla de base de datos persistente. En una de las tablas, la columna en cuestión existía, en la otra no. Al intentar persistir un objeto (del tipo que hace referencia a la tabla de base de datos subyacente incorrecta), se produjo este error.

+0

Wow! this answer en realidad yo, gracias –

1

verifique la posición de la anotación de columna en la clase java para el campo Por ejemplo, considere una tabla con el nombre ESTUDIANTE con 3 columnas (Nombre, Rollo_No, Marcas).

Luego asegúrese de haber agregado la anotación de abajo de la columna antes del Método Getter en lugar del método Setter. Se va a resolver ur problema @Column (name = "Nombre", longitud = 100)

**@Column(name = "NAME", length = 100) 
public String getName() {** 
    return name; 
} 

    public void setName(String name) { 
    this.name= name; 
} 
2

Es porque uno de los DBs la columna fue creado con "que hace que su caso sensible nombre.

Oracle tabla nombre de columna: GoodRec colmena no puede reconocer mayúsculas y minúsculas: se genera un error fue - Causado por: java.sql.SQLSyntaxErrorException: ORA-00904: "GOODREC": identificador no válido

Solución: Cambiar el nombre de nombre de la columna de Oracle hasta el tope s.

Cuestiones relacionadas