Olá pessoal!
Estou iniciando no hiernate e me deparei com um probleminha chato que ja me fez perder muitas horas. A grosso modo não consigo fazer inserções no banco de dados postgre com uma id auto-incrementada. Tenho a seguinte classe produto:
package repositorios;
public class Produtos {
protected long id;
protected String nome;
protected double vlrVenda;
protected double percASVendas;
public Produtos(){
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public double getVlrVenda() {
return vlrVenda;
}
public void setVlrVenda(double vlrVenda) {
this.vlrVenda = vlrVenda;
}
public double getPercASVendas() {
return percASVendas;
}
public void setPercASVendas(double percASVendas) {
this.percASVendas = percASVendas;
}
}
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import repositorios.Produtos;
public class TesteIncHibernate {
/**
* @param args
*/
public static void main(String[] args) {
Session session = null;
System.out.println("criou sessão");
try{
SessionFactory sessionfactory = new Configuration().configure().buildSessionFactory();
session = sessionfactory.openSession();
Produtos produto = new Produtos();
System.out.println("criou o objeto");
produto.setNome("teste");
produto.setPercASVendas(15);
produto.setVlrVenda(12);
System.out.println("setou valores");
session.save(produto);
System.out.println("salvou");
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
O seguinte mapeamento xml:
<?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="repositorios.Produtos" table="Produtos">
<id name="id" type="long" column="ID" >
<generator class="sequence">
<param name="sequence">produto_id</param>
</generator>
</id>
<property name="nome">
<column name="nome" />
</property>
<property name="vlrVenda">
<column name="vlrVenda"/>
</property>
<property name="percASVendas">
<column name="percASVendas"/>
</property>
</class>
</hibernate-mapping>
e o hibernate.cfg.xml:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//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.url">jdbc:postgresql://localhost/SimplesBD</property>
<property name="hibernate.connection.username">jackson</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- Mapping files -->
<mapping resource="simples.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Quando executo a classe de teste recebo a seguinte saida:
criou o objeto
setou valores
Hibernate: select nextval ('produto_id')
salvou
ou seja, executa tudo, mas ocorre um erro em tempo de execução "Hibernate: select nextval ('produto_id')". Quando olho no banco a sequnce que criei é incrementada em 1, mas nenhum registro é adicionado a tabela de produtos. Alguém sabe como posso fazer para conseguir adicionar dados na tabela com uma id auto-increment?
Estou utilizando o eclipse galileo com postgre 8 e hibernate 3.
Abraço!