Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Criar um método Save customizado

Olá pessoal,

Estou desenvolvendo uma aplicação com Spring Boot que tenho as seguintes classes:

Pessoa, Profissional, Paciente e Usuário, sendo Pessoa a classe mãe da qual todas as outras herdam.

Tendo isso em vista, quero adicionar como usuário, uma pessoa que já é profissional, então minha dúvida é como farei isso, pois o método save criado por padrão salvaria esse usuário como uma nova pessoa, o que gera problema tendo em vista que esse usuário já é um profissional e portanto uma pessoa cadastrada, desta forma preciso apenas acrescentar na tabela de Usuário os dados necessários sem gerar nada para a tabela Pessoa.

Imagino que como consulta SQL seria algo como:

INSERT INTO Pessoa (id, senha) VALUES (1, '123');

Mas como fazer isso com Spring Boot? Tentei fazer adicionando um novo método que tivesse a query da forma como descrevi acima, mas não funcionou.

3 respostas
solução!

Oi Hallessandro, acho que o problema não é bem do spring boot. É mais do Hibernate e seus mapeamentos. Para ser bem sincero, você caiu num típico problema de herança, quando você quer compartilhar características apenas entre parte da cadeia da herança.

Dado que você já está nessa situação, um jeito gambiarrento é subir as características comuns para o usuário e só usar nos tipos específicos. Outro jeito mais radical, é arrancar a herança, encarar como tipos diferentes e só criar uma interface para algo que realmente for em comum entre eles.

Olá Hallesandro,

Você pode criar custons queries nas interfaces de CrudRepository < SuaClasse,Identificador >

dessa forma: Tenho uma inferface de uma Classe Usuario, ai criei um select extra assim

@Repository
public interface UsuarioRepository extends CrudRepository<Usuario, Integer> {

    @Query("select u from Usuario u where u.nome = ?")
    public Usuario getLogin(String login);

}

Assim utilizando a annotation Query

Olá Pedro,

Para consultas com select eu já faço dessa forma ai, o que está pegando é para inserts, pelo menos quando testei esse padrão ai não funcionou com insert.