hibernateXcompositeID

seu eu tiroi o key-many-to-one ele funciona perfeitamente do jeito q eu tinha feito. O tomcat nao reconhece erros de hibernate…por isto dah este erro. Nao adianta eu fazer standalone…o q eu tenho q entregar é JSP…bom…se nao puder me ajudar mais jah agradeco tudo ate agora…
até maiisss

Se você fizer standalone você pode debugar mais facil, ou simplesmente dar um printStackTrace() na exceção pra ver a mensagem… e no log do tomcat aparece o stack trace completo…

Eu entendi o q vc quis dizer…mas não foi preciso …rsrs
Este ocorre toda vez que algo está errado no xml (mapeamento), seja um caracter a mais, uma palavra a mais e q nao deveria estar lá.
Eu resolvi o meu problema, consegui com que minha aplicação reconhecesse um dos meus campos da chave composta como sendo um campo vindo de outra tabela.
Aquele lance de que é preciso uma classe exclusivamente para o composite-id é verdade…senão não funciona meeeesssmo! E aqueles lances dos metodos equals e hashcode eu nao precisei implementar não…mas deixei lá comentado.
Olha só a classe para o composite-id:
/*

  • CompositeIDHistUsuario.java
  • Created on 18 de Setembro de 2006, 11:03
  • To change this template, choose Tools | Template Manager
  • and open the template in the editor. */

package vo;

import java.io.Serializable;

public class HistUsuarioPK implements Serializable
{
//campo da classe a ser mapeada mesmo
private java.sql.Timestamp dt_cadastro;
//campo na classe a ser mapeada e que é foreing key, se instancia o objeto
private Usuario usuario;

public java.sql.Timestamp getDt_cadastro() {
    return dt_cadastro;
}

public void setDt_cadastro(java.sql.Timestamp dt_cadastro) {
    this.dt_cadastro = dt_cadastro;
}    

public Usuario getUsuario() {
    return usuario;
}

public void setUsuario(Usuario usuario) {
    this.usuario = usuario;
}

}
Este é o trecho no DAO…que era o que eu tinha dúvida:

depois dos comandos abrindo o hibernate e inserindo demais campos
(…)
// Chave Composta
Usuario usuario=new Usuario();
//o id_usuario eu passei como parametro
usuario = (Usuario)sessao.get(Usuario.class, id_usuario);
HistUsuarioPK ch= new HistUsuarioPK();
ch.setDt_cadastro(dt_cadastro);
ch.setUsuario(usuario);
hist_usuario.setChave(ch);

        sessao.save(hist_usuario);
        
        transacao.commit();
        sessao.close();
        
    } catch (Exception ex) {
        ex.printStackTrace();
        return false;
    }

e a parte do composite Id no mapeamento ficou assim:

<composite-id name=“Chave” class=“HistUsuarioPK”>
<key-property name=“Dt_cadastro” type=“timestamp”>
<column name=“dt_cadastro”/>
</key-property>

      &lt;key-many-to-one name="Usuario"&gt;
            &lt;column name="id_usuario"/&gt;
        &lt;/key-many-to-one&gt;
    &lt;/composite-id&gt; 

tirei uns atributos do key-many-to-one pq estavam fazendo não dar certo.
BOm colega, é isto. MUITO OBRIGADA PELA ATENÇÃO!!!

AH! o que é classpath é sacanagem pow…foi vc quem colocou isto pra mim? srrssrrs

Maravilha que funcionou…

Mas esse negocio de criar uma classe pra chave da classe é opicional, apesar do pessoal do Hibernate recomenda-la, eu sempre usei sem criar essa classe, mas se no seu caso é melhor assim, otimo então…

Se você precisar consultar no futuro:
http://www.hibernate.org/hib_docs/v3/reference/en/html/mapping.html#mapping-declaration-compositeid

Não, não. Isso é automatico, é baseado na quantidade de mensagens que você tem no forum…