Hibernate Annotations com Sequence e Composite Primary Keys  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
leandro_bortolotto
Debugger

Membro desde: 25/05/2006 16:43:41
Mensagens: 60
Offline

Boa tarde pessoal.
Tenho uma tabela com chave composta pelos campos "cd_cliente" e "cd_usuario" onde o campo "cd_usuario" utiliza uma sequence para ser incrementado.
Estou enfrentando o seguinte problema: não consigo criar o mapeamento para tal situação.
Já procurei, testei de n formas e nada.

Bom, o ponto mais próximo que cheguei é o seguinte, uma classe chamada Usuario.java e uma UsuarioPK.java, como seguem os códigos:

Usuario.java


UsuarioPK.java


DDL da tabela usuario:


A exceção ocorre quando vou fazer um select ou insert, é a seguinte:

A linha: da exceção é onde mostra o verdadeiro problema que estou enfrentando.

Vale lembrar que estou utilizando: JSF 2.0, PostgreSQL 8.1, Tomcat 6 e Hibernate 3.
Obs.: Se na classe Usuario.java eu comentar as annotations: @IdClass(UsuarioPK.class) e @Id (do campo cdCliente) eu consigo fazer a consulta e o insert normalmente, ou seja, com essas duas linhas comentadas funciona, mas desse modo o mapeamento fica diferente da modelagem do banco de dados.
Só para facilitar segue o trecho de código da classe Usuario.java com esses dois comentários:


Desde já agradeço a atenção de todos.


Leandro Sehnem Bortolotto
Paulo Bueno
Smalltalk

Membro desde: 09/11/2009 12:07:10
Mensagens: 1
Offline

Leandro,

fiz uma classe de teste com o seguinte código:

Usuario user = new Usuario();
user.setCdCliente(1);
user.setIdUsuario("Bortolotto");
user.setDsSenha("3333");
user.setFlAtivo("S");
tx.begin();
em.persist(user);
tx.commit();

Capturei a seguinte causa de exceção:

Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into usuario1 (ds_senha, fl_ativo, id_usuario, cdCliente, cdUsuario) values (3333, S, Bortolotto, 1, 0) foi abortada. Chame getNextException para ver a causa.

procurei o resultado de getNextException() e verifiquei o seguinte:

ERROR: null value in column "cd_cliente" violates not-null constraint

Ora, como eu setei a propriedade cdCliente (que no banco se chama cd_cliente) e verificando que o insert gerado foi "insert into usuario1 (ds_senha, fl_ativo, id_usuario, cdCliente, cdUsuario)", percebi que os nomes das duas últimas colunas estavam errados.

Anotei então a classe UsuarioPK da seguinte maneira:

@Column(name="cd_cliente")
private long cdCliente;
@Column(name="cd_usuario")
private long cdUsuario;

Isso fez com que o insert fosse gerado de maneira correta e funcionou!

Com a query não tive problema.

Qualquer coisa, estamos por aqui.

Abraços!


leandro_bortolotto
Debugger

Membro desde: 25/05/2006 16:43:41
Mensagens: 60
Offline

Isso realmente resolveu o problema.
Apenas um detalhe, da maneira que eu postei funciona com o toplink, mas não com o hibernate.

Muito obrigado.

Leandro Sehnem Bortolotto
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team