Estou implementando um sistema que contém a seguinte relacionamento entre classes:
1- Um Usuario está associado a uma e somente uma Pessoa
2- Um Administrador está associado a uma e somente uma Pessoa
3- Um Cliente está relaciondo a uma e somente uma Pessoa
Nesse mesmo sistema tenho um requisito para implementação de uma listagem de usuários: Somente listar, ordenando pelo documento, usuários que são administradores.
Bem, escrevi o comando SQL para essa consulta e ficou assim:
SELECT U.*
FROM USUARIO U
JOIN PESSOA P ON P.ID = U.PESSOA
JOIN ADMINISTRADOR A ON A.PESSOA = P.ID
ORDER BY P.DOCUMENTO
O comando SQL acima é o comando ANSI, como faço pra implementar essa consulta usando Hibernate, uma fez que o relacionamento da classe Usuario é com Pessoa e não com Administrador.
Agradeço qualquer ajuda. Estou colocando em anexo o diagrama
Entendo, do teu diagrama, que pessoa possui usuário e possui administrador, isso?
Meio estranho.
Bom, se eu quisesse os usuários de uma pessoa, faria
"SELECT p.usuario u FROM Pessoa p".
Isso criaria um SQL mais ou menos assim:
SELECT *
FROM Usuario u
JOIN Pessoa p
ON p.id = u.id
A partir daí você tem a base que necessita.
Infelizmente drsmachado, a sua explicação não resolve meu problema…
Vou tentar explicar como funciona…
O sistema será dividido em 2 partes. Uma área administrativa e uma área para clientes.
A Pessoa pode ser tanto cliente quanto administrador.
Para efetuar o login na área de cliente, o usuário tem que estar associado a uma pessoa que é cliente e para logar na área administrativa, o usuário tem que estar associado a uma pessoa que é administrador.
O sistema tem que aplicar essa regra para especificar qual usuário pode acessar uma determinada área.
Atualmente eu estou implementando o login para a área administrativa, portando somente pessoas que estejam vinculadas a um administrador podem logar.
Dê uma pesquisada em:
@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)