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>
<key-many-to-one name="Usuario">
<column name="id_usuario"/>
</key-many-to-one>
</composite-id>
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…