Hibernate - Mapeamento Many-to-One

6 respostas
smota

Ae pessoal, to com uma dúvida básica em mapeamento para o Hibernate.

Tenho um mapeamento Many-to-One entre Usuario->Departamento ... criado com o xdoclet assim:
<class name="br.univap.fcc.sgpw.models.User" table="usuario" dynamic-update="false" dynamic-insert="false">
-
	<id name="userID" column="userID" type="java.lang.Long">
<generator class="native">
            </generator>
</id>
....
<many-to-one name="departamento" class="br.univap.fcc.sgpw.models.Departamento" cascade="none" outer-join="auto" update="true" insert="true" column="departamento"/>
</class>

O problema é que não quero que o usuário necessariamente tenha um departamento, mas com esse mapeamento recebo um erro

net.sf.hibernate.UnresolvableObjectException: No row with the given identifier exists: 0, of class: br.univap.fcc.sgpw.models.Departamento

Como fica então o mapeamento?

Valeu

6 Respostas

ricardolecheta

Porque está retornando 0 no id do Departamento? O id de departamento é um tipo primativo?

Umlauf

Pelo que entendi nesse exemplo do hibernate, você deve usar a associação <many-to-one> no objeto filho somente se for obrigatório que todo objeto filho tenha um pai (associação bi-direcional), o que não é o que vc quer.
Caso contrário, use apenas <one-to-many> no objeto pai.

A

Pelo que eu entendi, no seu sistema, quando um usuário não tem departamento vc coloca na tabela o valor 0. Correto ?

Se for assim, ele vai tentar buscar o Departamento de ID “0” e se não encontrar vai ser atirada aquela exceção lá…

Faz o seguinte, ao invés de colocar zero em quem não tem departamento, coloca NULL … acho q pode resolver o problema.

Abraço

smota

Opa opa …

entonces, não é zero, no BD está nulo mesmo e o tipo do ID é Long (o objeto, não o tipo primitivo).

A

Nenhuma linha da sua tabela usuario tem departamento = 0 ?

Pq o erro q tá dando é esse mesmo, ele nao consegue achar departamento com identificador 0.

A

Ah, me lembrei de uma coisa agora…

Se quando a tabela Usuarios foi criada o campo departamento foi “dito” “NOT NULL” e sua aplicação for tentar colocar null lah, ou nao colocar nada, o banco vai colocar valor 0 (zero), q é o default, naquela coluna.

Criado 20 de julho de 2004
Ultima resposta 21 de jul. de 2004
Respostas 6
Participantes 4