... must have same number of columns as the referenced primary key

Olá, boa noite.
Apesar de a mais ou menos 1 ano sempre efetuar consultas e na maioria das vezes resolver meus problemas, é a primeira vez que posto no GUJ.

Sou estudante e estou fazendo estágio por uma empresa que está me oferecendo treinamento em JAVA, onde estamos desenvolvendo projeto utilizando Hibernate.

Bom, vamos ao problema, agradeço se alguém puder me ajudar.

Estou mapeando no arquivo “.hbm.xml” as classes do projeto, a Classe Hospedagem recebe da Classe Quarto uma chave composta.
No mapeamento da Classe Quarto está tudo correto, já inseri no banco, tudo certinho, usei composite-id.
Agora, quando tento inserir dados na Tabela Hospedagem, estou com o seguinte erro:
"Foreign key (FKA4FE7D826D3F48AA:TB_HOSPEDAGEM [NR_QUARTO])) must have same number of columns as the referenced primary key (TB_QUARTO [CD_HOTEL,NR_QUARTO])"
O erro parece simples de interpretar, acontece que não estou sabendo mapear a Classe Hospedagem para “receber” a chave-composta de Quarto

Segue os mapeamentos que fiz:
(a chave composta possui CD_HOTEL e NR_QUARTO)

		<!-- Quarto -->
	<class name="br.com.cubo.beans.Quarto" table="TB_QUARTO">
		<composite-id>
			<key-many-to-one name="hotel" class="br.com.cubo.beans.Hotel" column="CD_HOTEL" />		
			<key-property name="nroQuarto" type="integer" column="NR_QUARTO"/>
		</composite-id>
		<many-to-one name="tipoQuarto" class="br.com.cubo.beans.TipoQuarto" column="CD_TIPO_QUARTO" />
	</class>
	
	<!-- Hospedagem -->
	<class name="br.com.cubo.beans.Hospedagem" table="TB_HOSPEDAGEM">
		<id name="guiaId" type="integer" column="NR_GUIA"><generator class="assigned" /></id>
		<many-to-one name="hotel" class="br.com.cubo.beans.Quarto" column="CD_HOTEL" />
		<many-to-one name="cliente" class="br.com.cubo.beans.Cliente" column="CD_CLIENTE" />
		<many-to-one name="quarto" class="br.com.cubo.beans.Quarto" column="NR_QUARTO" />
		<property name="motivo"><column name="DS_MOTIVO_HOSPEDAGEM" /></property>
		<property name="dtEntrada"><column name="DT_ENTRADA" /></property>
		<property name="dtPrevisaoSaida"><column name="DT_PREVISAO_SAIDA" /></property>
		<property name="dtSaida"><column name="DT_SAIDA" /></property>
		<property name="diasHospedagem"><column name="QT_DIAS_HOSPEDAGEM" /></property>
		<property name="vlrDiaria"><column name="VL_DIARIA" /></property>
		<many-to-one name="recepcionista" class="br.com.cubo.beans.Funcionario" column="CD_RECEPCIONISTA" />
	</class>

Alguém já teve esse problema ???
Poderia me ajudar ???

Agradeço desde já, espero que essa postagem possa ajudar outros com o mesmo problema.
Até mais.

Alguém sabe ???

Estou pesquisando e testando desde 4ª feira e não encontro a solução …

Obrigado.

[quote=cfgondran] <many-to-one name="quarto" class="br.com.cubo.beans.Quarto" column="NR_QUARTO" /> [/quote]
Não é só a coluna NR_QUARTO que faz parte da relação. Também é a CD_HOTEL.

		<many-to-one name="quarto" class="br.com.cubo.beans.Quarto">
      <colum name="CD_HOTEL"/>                         
      <colum name="NR_QUARTO"/>
  </many-to-one>		

Beleza cara ?
Obrigado pela resposta …

Então, eu já tinha tentado isso, porém não deu certo.
Perceba que existe um probleminha aí, já que, sim, da forma que vc colocou, eu estaria referenciando as 2 colunas da Tabela Quarto, porém, dessa forma, eu estaria referenciando apenas 1 atributo, aí dá erro.

Então, de acordo com a sua idéia, tive a seguinte idéia agora (Coloquei insert=“false” update=“false” pois deu erro pedindo pra colocar):

		<many-to-one name="quarto" class="br.com.cubo.beans.Quarto" insert="false" update="false">  
    		      <column name="CD_HOTEL"/>                           
    		      <column name="NR_QUARTO"/>  
		</many-to-one>  
		<many-to-one name="hotel" class="br.com.cubo.beans.Quarto">  
    		      <column name="CD_HOTEL"/>                           
    		      <column name="NR_QUARTO"/>  
		</many-to-one> 

Aí agora deu erro getter, mas garanto que está tudo certinho …
[color=red]org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of br.com.cubo.beans.Quarto.hotel[/color]

*Continuo pesquisando …
mas agradeço se alguém tiver alguma idéia, valeu !!!

Só dando um retorno.
Não encontrei solução para mapear as tabelas da forma que queria.

Promovi a PK composta para 2 FK’s e criei uma outra PK simples.
A PK simples é uma String (varchar) que concatena as duas FK’s …

foi a única opção que tive para prosseguir.

Obrigado a quem ajudou.