Hola a todos estoy empezando a utilizar hibernate en eclipse para
conectarme a una base de datos postgresql . Para empezar cree una
clase muy simple llamada Nombre :
package PruebaHibernate;
public class Nombre {
private String Nombre;
private Long IdNombre;
public Long getIdNombre() {
return IdNombre;
}
public void setIdNombre(Long idNombre) {
IdNombre = idNombre;
}
public String getNombre() {
return Nombre;
}
public void setNombre(String nombre) {
Nombre = nombre;
}
}
La mapee de esta manera:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="PruebaHibernate.Nombre" table="nombre"
schema="pruebaHibernate">
<id name="IdNombre" type="long" column ="idNombre">
<generator class="sequence">
<param name="sequence">nombre_idNombre_seq</param>
</generator>
</id>
<property name="Nombre" type="string">
<column name="nombre" />
</property>
</class>
</hibernate-mapping>
y el archivo de configuracion es el siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"
http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property
name="hibernate.connection.driver_class">org.postgresql.Driver</
property>
<property name="hibernate.connection.password">agil</property>
<property name="hibernate.connection.url">jdbc:postgresql://
localhost:5432/pruebaHibernate</property>
<property name="hibernate.connection.username">postgres</
property>
<property
name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</
property>
<property name="current_session_context_class">thread</
property>
<property
name="cache.provider_class">org.hibernate.cache.NoCacheProvider</
property>
<property name="show_sql">true</property>
<property name="connection.pool_size">1</property>
<mapping resource="PruebaHibernate/Nombre.hbm.xml"/>
</session-factory>
</hibernate-configuration>
La tablas se llama nombre y solo tiene dos campos idNombre (bigserial)
no null y nombre character varying
La clase que trata de hacer el alta es la clase Alta:
public class Alta {
private SessionFactory sessionFactory;
public Alta() {
try {
System.out.println("Inicalizando Hibernate");
sessionFactory = new Configuration().configure().buildSessionFactory
();
System.out.println("terminado la inicializacion de Hibernate");
} catch (HibernateException e) {
e.printStackTrace();
}
}
public void agregaNombre(String nombres) {
try {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Nombre nombre = new Nombre();
nombre.setNombre(nombres);
session.save(nombre);
tx.commit();
session.close();
} catch (HibernateException e) {
e.printStackTrace();
}
}
}
Pero el ejecuto y me da el siguiente error:
Inicalizando Hibernate
terminado la inicializacion de Hibernate
Hibernate: select nextval ('nombre_idNombre_seq')
org.hibernate.exception.SQLGrammarException: could not get next
sequence value
at org.hibernate.exception.SQLStateConverter.convert
(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert
(JDBCExceptionHelper.java:66)
at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:
119)
at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId
(AbstractSaveEventListener.java:122)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId
(DefaultSaveOrUpdateEventListener.java:210)
at
org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId
(DefaultSaveEventListener.java:56)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient
(DefaultSaveOrUpdateEventListener.java:195)
at
org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate
(DefaultSaveEventListener.java:50)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate
(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
at PruebaHibernate.Alta.agregaNombre(Alta.java:28)
at PruebaHibernate.Inicio.main(Inicio.java:11)
Caused by: org.postgresql.util.PSQLException: ERROR: no existe la
relación «nombre_idnombre_seq»
Position: 17
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse
(QueryExecutorImpl.java:2062)
at org.postgresql.core.v3.QueryExecutorImpl.processResults
(QueryExecutorImpl.java:1795)
at org.postgresql.core.v3.QueryExecutorImpl.execute
(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute
(AbstractJdbc2Statement.java:479)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags
(AbstractJdbc2Statement.java:367)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery
(AbstractJdbc2Statement.java:271)
at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:
98)
... 11 more
Si alguien podria darme una idea se q es como q no puede obtener un
nuevo valor para la clave del nuevo registro pero probe de todo y no
puedo resolverlo.
Muchas gracias desde ya por su tiempo y ayuda
Saludos
Duilio