Erro - chave composta - hibernate

org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): jdo.TelefoneContatos at org.hibernate.id.Assigned.generate(Assigned.java:33) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:98) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
estou tentando salvar um telefoneContato q tem chave composta e ele dá esse erro! alguém ja viu isto?

Você atribuiu a chama ao objeto corretamente? Ela não pode ser gerada automaticamente!

<composite-id name="comp_id" class="hibernate.TelefoneContatoPk"> <meta attribute="field-description" inherit="false"> @hibernate.id generator-class="assigned" </meta> <key-property name="codigoContato" column="codigo_contato" type="java.lang.Integer" length="4" > <meta attribute="field-description"> @hibernate.property column="codigo_contato" </meta> </key-property> <key-property name="codigoTelefone" column="codigo_telefone" type="java.lang.Integer" length="4" > <meta attribute="field-description"> @hibernate.property column="codigo_telefone" </meta> </key-property> </composite-id>
como colocar pra ele gerar manualmente a chave composta?

o lance eh q vc tem q setar manualmente os dois IDs antes de chamar o metodo save()

blz, na verdade meu erro estava na classe TelefoneContatoPk, eu não tinha feito os métodos hashCode e equals.
mas eu tenho outra erro agora, estou gravando o meu telefone contato mas na hora de carregar as informações ou seja instanciar passando a chave composta ele não carrega um chave estrangeira q eu tenho tb.
ex:

TelefoneContatos tel = new TelefoneContatos(1,new Contatos(1)); System.out.println(tel.getContato().getNome()); System.out.println(tel.getDdd()+" "+tel.getNumero()+" - "+tel.getTipoTelefone().getNome());
da erro pq retorna null no tipo de telefone (tel.getTipoTelefone() esta trazendo null) sendo q ele foi mapeado como uma chave estrangeira.
alguém sabe como fazer isso funcionar?

vc esta criando uma instancia de TelefoneContato, passando pro construtor uma no Instancia de Contatos…

acredito q tenha coisa estranha com seu mapeamento…a gente teria q dar uma olhada na classe TelefoneContatos e no seu mapeamento…pq aparentemente ao inicializa-la, vc esta criando uma nova instancia de Contatos…isso nao eh necessario se vc fez o mapeamento correto, pq o Hibernate mesmo vai trazer pra vc as classes q tiverem relacionamento com a q vc puxou do banco…

Na verdade eu estava instanciando um TelefoneContato errado, mas fiz um código q deu certo e ele carregou todo o objeto corretamente:

Sessao.getSession().get(Class classe,Serializable ser)

funcionou certinho!
Mas aproveitando, tem algo parecido com isso para uma classe q não é Serializable ? tipo isso aí funcionou acho eu pq passei como parametro TelefoneContato.class e a classe da chave composta q é Serializable new TelefoneContatoPk(int,int), mas gostaria de classes simples tipo Contatos eu fazer algo assim Sessao.getSession().get(“Contatos”,“chave primaria”) ou qualquer coisa parecida, ou seja q eu carregue o objeto só dando um get na sessao!!!
não sei se fui claro! Obrigado!