Estoy intentando ejecutar hibernate en una base de datos PostgreSQL 8.4.2. Siempre que intente ejecutar un código de Java simple como:PSQLException: ERROR: la relación "TABLE_NAME" no existe
List<User> users = service.findAllUsers();
me sale el siguiente error:
PSQLException: ERROR: relation "TABLE_NAME" does not exist
Desde que he opción hibernate.show_sql opción se establece en true, puedo ver que está tratando de hibernación ejecutar el siguiente comando SQL:
select this_.USERNAME as USERNAME0_0_, this_.PASSWORD as PASSWORD0_0_
from "TABLE_NAME" this_
Cuando en realidad, por lo menos debería ejecutar algo como:
select this_."USERNAME" as USERNAME0_0_, this_."PASSWORD" as PASSWORD0_0_
from "SCHEMA_NAME"."TABLE_NAME" as this_
¿Alguien sabe qué cambios necesito hacer para que Hibernate produzca el SQL correcto para PostgreSQL?
He creado el origen de datos PostgreSQL necesarios en el archivo applicationContext.xml:
<!-- Use Spring annotations -->
<context:annotation-config />
<!-- postgreSQL datasource -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url"
value="jdbc:postgresql://localhost/DB_NAME:5432/SCHEMA_NAME" />
<property name="username" value="postgres" />
<property name="password" value="password" />
<property name="defaultAutoCommit" value="false" />
</bean>
En el mismo archivo que he levantado la fábrica sesión con PostgreSQL dialecto:
<!-- Hibernate session factory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<value>com.myPackage.dbEntities.domain.User</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<!-- setup transaction manager -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
Por último, la La forma en que estoy mapeando la clase de dominio en la tabla es:
@Entity
@Table(name = "`TABLE_NAME`")
public class User {
@Id
@Column(name = "USERNAME")
private String username;
Has anyon e encontré un error similar ?. Cualquier ayuda para resolver este problema será muy apreciada. Tenga en cuenta que la pregunta es diferente para publicar Cannot simply use PostgreSQL table name (”relation does not exist”)
Disculpas por la larga publicación.
sólo para preguntar lo obvio: ¿La cuenta de usuario para acceder a la base de datos tiene permisos para ver la tabla ¿NOMBRE DE LA TABLA? (Si ha especificado el esquema en la conexión, puede no ser incorrecto omitir el nombre de esquema de la selección de hibernación). – davek
Sí, tengo en la mesa el siguiente permiso: ALTER TABLE "SCHEMA_NAME". PROPIETARIO "TABLE_NAME" PARA postgres; –