7
respostas

Relacionamento ONE to one

Olá, diferente do que foi realizado no curso, tentei fazer 2 tabelas, Usuário e Endereço, onde a relação acontecia de Endereço para Usuário, com o usuário tendo uma coluna "endereco_id" como identificador.

Minhas entidades : Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Outra entidade:

Na minha tentativa falha segui a seguinte abordagem: Com o erro "Inferred type 'S' for type parameter 'S' is not within its bound; should extend 'app.medico.api.models.EnderecoModel'"

7 respostas

Oi Carlos!

O erro é porque você está passando objetos DTO para os repositories. Precisa converter de DTO para entidade, passando a entidade como parâmetro nos métodos do repository.

Vou tentar

Olá voltei depois de transferir o DTO para model, declarei os models inicializando eles e passando o DTO no construtor. Porém gerou outros erros kkk

Erro na build, logo ao iniciar :Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2022-12-10T21:05:23.034-03:00 ERROR 8760 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'medicoController': Lookup method resolution failed at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.checkLookupMethods(AutowiredAnnotationBeanPostProcessor.java:470) ~[spring-beans-6.0.3-SNAPSHOT.jar:6.0.3-SNAPSHOT] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:340) ~[spring-beans-6.0.3-SNAPSHOT.jar:6.0.3-SNAPSHOT] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1283) ~[spring-beans-6.0.3-SNAPSHOT.jar:6.0.3-SNAPSHOT] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1185) ~[spring-beans-6.0.3-SNAPSHOT.jar:6.0.3-SNAPSHOT] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) ~[spring-beans-6.0.3-SNAPSHOT.jar:6.0.3-SNAPSHOT] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.0.3-SNAPSHOT.jar:6.0.3-SNAPSHOT] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.0.3-SNAPSHOT.jar:6.0.3-SNAPSHOT] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.3-SNAPSHOT.jar:6.0.3-SNAPSHOT] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.0.3-SNAPSHOT.jar:6.0.3-SNAPSHOT] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.0.3-SNAPSHOT.jar:6.0.3-SNAPSHOT] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:961) ~[spring-beans-6.0.3-SNAPSHOT.jar:6.0.3-SNAPSHOT] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:915) ~[spring-context-6.0.3-SNAPSHOT.jar:6.0.3-SNAPSHOT] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[spring-context-6.0.3-SNAPSHOT.jar:6.0.3-SNAPSHOT] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.0.1-SNAPSHOT.jar:3.0.1-SNAPSHOT] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[spring-boot-3.0.1-SNAPSHOT.jar:3.0.1-SNAPSHOT] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:432) ~[spring-boot-3.0.1-SNAPSHOT.jar:3.0.1-SNAPSHOT] at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-3.0.1-SNAPSHOT.jar:3.0.1-SNAPSHOT] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) ~[spring-boot-3.0.1-SNAPSHOT.jar:3.0.1-SNAPSHOT] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) ~[spring-boot-3.0.1-SNAPSHOT.jar:3.0.1-SNAPSHOT] at app.medico.api.ApiApplication.main(ApiApplication.java:14) ~[classes/:na] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:578) ~[na:na] [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 5.311 s

Endereço Model: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Model do médico aqui MedicoModel

Controller do médico aqui:

Oi Carlos!

Na entidade Medico você fez o mapeamento do relacionamento com enderço de maneira incorreta, utilizando o id e não a entidade. Além disso, no controller está setando manualmente o id do médico.

A recomendação é que você faça os cursos de JPA antes de prosseguir com Spring Boot, além dos outros cursos que constam como pré-requisito, para entender certinho como funciona essa parte da aplicação.

Bons estudos!

Olá estou fazendo os cursos de JPA justamente para resolver essas coisas, porém tem poucos exemplos de relação onetoone, encontrei apenas um exemplo de relacionamento entre entidades durante as aulas.

Atualizando o tópico, arrumei as relações porém a dúvida é outra, como salvar o campo "endereco_id" na tabela médicos? Pelo que vi é possível, que se torne mais dinâmico o processo de persistência ao invés de salvar manualmente com um :

medicoModel.setEnderecoId();

é possível deixar mais clean?

O endereço está sendo salvo corretamente Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi Carlos!

É legal saber q vc tirou suas duvida e obrigado por tirar as minha tbm eu ia perguntar isso mas ai eu vi seu post e começei a ler valeu irmão tmjnt

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software