| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/11/2009 12:50:38
|
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/11/2009 12:15:56
|
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!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/11/2009 19:26:40
|
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 |
|
|
 |
|
|
|
|