Relacionamento 1:1 Unidirecional

Estou com problema em criar um relacionamento 1:1 unidirecional no hibernate.
A regra é esta, um usuário só pode ter um status, mas um status pode ter vários usuários.
Como ficaria o meu hbm de usuário?

Tente algo assim:

http://www.hibernate.org/hib_docs/reference/en/html/mapping.html#mapping-declaration-manytoone

Blz, funcionou…
Mas eu gostaria de entender um pouco melhor.
Eu tenho 3 tabelas Usuario, TipoUsuario e Status. Um usuario tem só um tipo e um status e um tipo tem vários usuários e um status tem vários usuários e um tipo só tem um status.
E eu fiz assim no hbm do TipoUsuário:

<one-to-one name="status" class="test.Status" constrained="true"/>

E tive que fazer desta maneira no Usuário:

<many-to-one name="status" class="test.Status" column="id_status"></many-to-one>

Por que teve esta diferença de um hbm para outro se a regra era a mesma? Um usuário só pode ter um status e um tipoUsuário só pode ter um status.
E Desde já agradeço a ajuda de todos.

Veja bem…

<one-to-one name="status" class="test.Status" constrained="true"/>

Um Tipo de Usuário tem um e somente um status…
Por isso um relacionamento um-para-um de TipoUsuário-Status…

Agora ao contrário:

<many-to-one name="status" class="test.Status" column="id_status"></many-to-one>

Muitos usuários tem o mesmo status…
Por isso o relacionamento de muitos-para-um

Deu para sacar?

Mas eu to vendo um pequeno problema de normalização aqui…
Se você tem uma tabela TipoUsuário que está ligado com a tabela Status, porque a tabela Usuário não está ligado com TipoUsuário e sim com Status?
Acho que há uma redudância de dados que está dificultando um pouco o entendimento aí…
O relacionameto deveria ser: Usuario - TipoUsuario - Status e não Status - Usuário - TipoUsuario - Status(again)

Abraços…

A modelagem está assim porque o operador do sistema poderia tirar um usuario do sistema e também poderia tirar um tipo de usuário também, que ai tiraria todos os usuários ligados a um tipo.
Mas este sistema não está sendo usado mais…
Voltando a pergunta anterior, eu não entendi muito bem.
Você falou:

Isso também não se aplicaria a um usuário?
Um usuário tem um e somente um status?

[quote=Jedi_FeniX]

Você falou:

Isso também não se aplicaria a um usuário?
Um usuário tem um e somente um status?[/quote]

Não…

Vários usuários tem o mesmo status… Você pode ter 5 usuários com Status “Admin”, 2 usuários com o status “Operador”, 1 usuário com o status “Coisarada”…

pense assim: Se você fizer um select na tabela Status, buscando os usuários de determinado status, irá retornar 1 ou muitos usuários?!

select u.* from usuarios u, status s where s.descStatus like 'Admin';

Agora, se você fizer o mesmo com a tabela tipoUsuario

select tu.* from tipo_usuario tp, status s where s.descStatus like 'Admin';

O retorno será somente 1 tipo_usuário…

Agora ficou mais claro, valeu!
Aproveitando, eu gostaria de usar o tópico para tirar outras dúvidas.
No momento estou com esta, tenho uma procedure no PostgreSQL, toda vez que vou inserir um usuário eu uso esta procedure.
A procedure ela já calcula qual será o próximo id e ve se o usuário já existe.
Eu vi que eu posso colocar no aquivo hbm assim:

<sql-insert>SELECT set_user(null, ?, ?, ?);</sql-insert>

Mas toda vez que eu tento inserir um usuário dá erro.
Como o hibernate sabe qual são os campos da procedure?
Por exemplo o primeiro parâmetro da procedure é o id do usuário, se for nulo a procedure insere um usuário e for setado ela faz um update, como posso passar esta regra para o hibernate?