Iniciando no Hibernate + PostgreSQL

Bom dia pessoal.

Bom é o seguinte estou iniciando agora com o hibernate epara BD utilizo o PostgreSQL…

Fiz umas tabela para começar a aprender intão me deparei com o seguinte problema…

Tenho uma tabela Chamada Usuarios com os campos IDSequencial(Serial), Nome(Varchar) e Senha(Varchar)

Bom o problema está no IDSequencial que é serial que é do tipo auto-incremento no PostgrSQL e meu HBM esta nesse formato mas tenho quase certeza de que não esta certo


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="modelo.beans.Usuario" 
       table="usuario">
    <id name="id" column="IDSequencial">
        <generator class="increment"/>
    </id> 
    <property name="nome" column="nome"/>
    <property name="senha" column="senha"/>               
</class>
</hibernate-mapping>

Eu não estou sabendo como definir o generator class para o campo no banco…

Como ficaria o meu HBM correto?
E no BD terei que mudar algo

Fala Fábio… blz ?

Então… tb to começando agora com o Hibernate e acho que nessa eu posso te ajudar…

Seguinte… crie seu campo na tabela sem o serial, apenas como primary key…
Ai vc cria a sequence separada…

E faz assim…

        <id name="id" column="id">
        <generator class="sequence">
            <param name="sequence">nome_da_sequence</param>
        </generator>
        </id>

Aqui eu coloquei explicitamente o nome da sequence, mas se você omitir este nome, ele procura uma sequence hibernate_sequence para pegar o valor… (essa sequence vc tem que criar se não existir E SE for usar omitindo o nome da sequence)

Não sei se tem uma maneira de usar o serial direto, mas eu achei mais simples usar assim… :o)

Estou lendo o livro Hibernate In Action e recomendo…

Abraço.

Rodrigo

kleins e fabianofrizzo,

Eu aconselho a vocês darem uma olhada em Hibernate com Annotations, na minha opnião é bem mais prática, pois nos livramos dos XML’s, as anotações são feitas diretamento no modelo (classe).

Abraço e boa sorte.

@kleins vou tentar fazer assim e volto postar aqui no forum o resultado mas parece ser a maneira mais fazil mesmo.

@fsquadro

Eu estava olhando o Hibernate Annotation mas achei melhor começar fazendo com xml para ter uma ideia e depois que irei partir para o annotation…

Mas e no annotation como ficaria o Annotation para isto…

Muito Obrigado pela ajuda de todos

Fabiano,

Com Annotations a classe ficaria da seguinte forma:

@Entity
// Nome que você deseja dar a tabela no banco
@Table(name="usuario")
//Cria a sequence
@SequenceGenerator(name = "seq_usuario", sequenceName = "seq_usuario")

public classe Usuario {

	// Indica que este campo é a chave primária
	@Id
	//Indica que o campo é auto-incremento, e é gerado pela sequence "seq_usuario"
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_usuario")
	//nome que deseja que seja dado a coluna no banco
	// caso não coloque esta anotação, é criado com o nome do atributo, neste caso "id"
	@Column(name="id_usuario")
	private int id;
	
	@Column(name="txt_nome")
    private String nome;
	
	@Column(name="txt_senha")
    private String senha;

	//gets ans sets

}

Espero ter ajudado.

Cara vc ajudou e muito.

Estou tentando implementar um exemplo aqui e surgiram mais umas duvidas.

Se vc puder dar mais uma ajudinha ficarei grato

Seguinte nos anotations tem os imports a serem feitos certo…

Esses imports devo fazer da javax.Pesistence ou do proprio hibernate.

ou o Entity é do hibernate e o Table é do javax.Persistence

Muito obrigado pela sua ajuda

Fabiano,

Quando for dar o import utilize sempre a classe javax.persistence.

Boa sorte.

Eu tb estou primeiro aprendendo com os XMLs… pra depois usar outra coisa… hehehehehe

Abraço.

Rodrigo

kleins,

Eu também ainda estou aprendendo Hibernate, então peguei um exemplo em XML, e estou passando para o Annotation.
Peguei a referencia do Annotation na página do Hibernate, e estou mandando ver.

Boa sorte.

E como vc está se saindo ?

Esta tendo dificuldades ?

Eu vou fazer um projeto primeiro com XML pra depois partir pro Annotation… como não é um projeto muito grande… vai ser rapido heheheh.

Abraço.

Rodrigo

kleins,

Facil não posso dizer que está sendo, mas com a ajuda aqui do GUJ e do Guia de Referencia do próprio Hibernate to conseguindo evoluir.
To quebrando bastante a cabeça, mas aos poucos tá saindo. hehehe!

Estou tentando mapear um campo Serial do Postgres no Hibernate. Não ocorre nenhum erro, porém o campo fica zerado. Já tentei com e sem o @SequenceGenerator e o resultado é o mesmo.
Seguem os códigos:

Java:

@Entity
@Table(name = "notas")
@SuppressWarnings("serial")
@SequenceGenerator(name = "notas_not_id_seq", sequenceName = "notas_not_id_seq") 
public class Nota implements Serializable {
	
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "notas_not_id_seq")
	@Column(name = "not_id")
	private int id;
...

SQL:

...
not_id serial NOT NULL
...

CREATE SEQUENCE notas_not_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;

Alguém pode me ajudar?
[]'s