Salve pessoal! \o/
Inventei aqui de fazer composição, criei a classe Pessoa e coloquei dentro o proprietário, usuário e contato:
public class Pessoa {
@OneToOne(cascade = CascadeType.ALL,orphanRemoval=true)
@JoinColumn(name="id_proprietario")
private Proprietario proprietario;
@OneToOne(cascade = CascadeType.ALL,orphanRemoval=true)
@JoinColumn(name="id_contato")
private Contato contato;
@OneToOne(cascade = CascadeType.ALL,orphanRemoval=true)
@JoinColumn(name="id_usuario")
private Usuario usuario;
Reparei que devido o VRaptor trabalhar com as id’s dos objetos, eu não poderia trabalhar mais com a idProprietario, nem idContato, nem idUsuario, já que teria que ter objeto Pessoa e os inputs ficariam:
pessoa.nome
pessoa.email
//etc
Para alterar e remover teria que chamar idPessoa. =/
Passando pelo Controller a coisa piora, chegando no DAO precisa instanciar o objeto proprietario com new Proprietario(), já que está td na classe Pessoa, ficou uma coisa meio bizonha. Teria que receber no Controller:
public void adiciona(final Pessoa pessoa) {
// codigo
}
Achei horrível, então fiz o inverso, dentro da classe proprietário, contato e usuário coloquei:
@OneToOne(cascade = CascadeType.ALL,orphanRemoval=true)
@JoinColumn(name="id_pessoa")
private Pessoa pessoa;
Ai beleza, posso trabalhar com as ids das classes, mesmo que tivesse que mandar no controller Pessoa e Proprietario no parâmetro:
public void adiciona(final Proprietario proprietario, final Pessoa pessoa) {
// codigo
proprietarioDao.adiciona(proprietario, pessoa);
}
Queria saber de vcs se já passaram por esse tipo de abordagem e se resolveram do mesmo jeito que eu fiz, depois de ler vários tópicos fiquei na dúvida se resolvi a questão da forma mais correta.
Agraço!!!