Galera, estou com a seguinte dificuldade. Tenho minhas tabelas abaixo:
[quote]person 0xN address
person 1x1 serviceProvider
serviceProvider 1x1 corporation
serviceProvider 1x1 individual[/quote]
Sou novato em hibernate, essa é minha primeira aplicação com esse framework. E tenho algumas duvidas.
Então, tinha tentado uma abordagem para fazer os inserts por herança de classes, onde era Person(classe pai), ServiceProvider(classe filha) e Corporation ou Individual(classe neta).
Porque minha intensão era somente fazer:
Corporation corp = new Corporation();// o codigo não é exatamente assim, é somente uma explicação
corp.set......
IDao<Corporation> dao = new Dao<Corporation>();
//depois de todas as propriedades das classes acima setadas!
dao.save(corp);
//onde eu imaginei que o hibernate iria se virar fazendo os demais inserts(ServiceProvider e Person)
Perdi um certo tempo com o código acima sem sucesso, dai vi que minha abordagem estava errada, mais pra que mesmo que eu precisaria de herança??? Queria faciliar o meu trabalho.
Resolvi que iria inserir um por um:
[code]public void create(Person person, ServiceProvider serviceProvider, Corporation corporation, Address address){
this.session.save(address);
person.setAddress(address);
this.session.save(person);
serviceProvider.setPerson(person);
this.session.save(serviceProvider);
corporation.setServiceProvider(serviceProvider);
this.session.save(corporation);
}[/code]
Opa dai tudo funcionou, perfeito.
DUVIDA 1:
Agora vem o pior, tentei a mesma abordagem para update, e… erro:
public void update(Person person, ServiceProvider serviceProvider, Corporation corporation, Address address){
this.session.update(address);
this.session.update(person);
this.session.update(serviceProvider);
this.session.update(corporation);
}
Address vem sempre null.
DUVIDA 2:
E o delete tambem não funciona, eu setei pra todas as propriedades que foram mapeadas como OneToOne para cascade = CascadeType.All, com o codigo abaixo:
public void delete(Person person){
this.session.delete(person);
}
Mesma coisa, não consigo excluir porque da erro de fk, mais se esta para deletar em cascata, o que pode estar errado.
Agora sobre o VRaptor, esta correta essa abordagem?
[code]@Get
@Path("/serviceProviderCorporation/{serviceProviderCorporation.id}")
public void show(Person serviceProviderCorporation){
Person person = this.dao.findById(serviceProviderCorporation.getId());
Address address = person.getAddress();
ServiceProvider serviceProvider = person.getServiceProvider();
Corporation corporation = person.getServiceProvider().getCorporation();
result.include("person", person)
.include("address", address)
.include("serviceProvider", serviceProvider)
.include("corporation", corporation);
}[/code]