java - spring boot using jackson persist of nested entity failing -


i working first spring-boot project. have 2 entities 1 dependant on other.

here json inserts data

{   "city": "chicago",   "description": "scattered clouds",   "humidity": 33,   "pressure": 1020,   "temperature": 25,   "wind": {     "speed": 3.1,     "degree": 240   },   "timestamp": "2017-02-14t05:48:41.861z" } 

as can see wind has separate entity.

first entity weathersensor

@entity public class weathersensor {      public weathersensor() {         this.id = uuid.randomuuid().tostring();     }         @id     private string id;     private string city;     private string description;     private int humidity;     private int pressure;     private int temperature;     private timestamp timestamp;     @onetoone     private wind wind;      public string getid() {         return id;     }      public void setid(string id) {         this.id = id;     }      @override     public string tostring() {         return "weathersensor [city=" + city + ", description=" + description + ", humidity=" + humidity + ", pressure="                 + pressure + ", temperature=" + temperature + ", timestamp=" + timestamp + ", wind=" + wind + "]";     }      public string getcity() {         return city;     }      public void setcity(string city) {         this.city = city;     }      public string getdescription() {         return description;     }      public void setdescription(string description) {         this.description = description;     }      public int gethumidity() {         return humidity;     }      public void sethumidity(int humidity) {         this.humidity = humidity;     }      public int getpressure() {         return pressure;     }      public void setpressure(int pressure) {         this.pressure = pressure;     }      public int gettemperature() {         return temperature;     }      public void settemperature(int temperature) {         this.temperature = temperature;     }      public timestamp gettimestamp() {         return timestamp;     }      public void settimestamp(timestamp timestamp) {         this.timestamp = timestamp;     }      public wind getwind() {         return wind;     }      public void setwind(wind wind) {         this.wind = wind;     }  } 

second entity wind

@entity public class wind {      public wind() {         this.id = uuid.randomuuid().tostring();     }      @id     private string id;      private float speed;     private int degree;      public string getid() {         return id;     }      public void setid(string id) {         this.id = id;     }      public float getspeed() {         return speed;     }      public void setspeed(float speed) {         this.speed = speed;     }      public int getdegree() {         return degree;     }      public void setdegree(int degree) {         this.degree = degree;     }      @override     public string tostring() {         return "wind [speed=" + speed + ", degree=" + degree + "]";     }  } 

here exception stack

2017-04-07 12:30:32.631 error 12282 --- [nio-9000-exec-1] o.a.c.c.c.[.[.[.[dispatcherservlet]      : servlet.service() servlet [dispatcherservlet] in context path [/api] threw exception [request processing failed; nested exception org.springframework.orm.jpa.jpaobjectretrievalfailureexception: unable find io.egen.api.entity.wind id 5e022f73-3815-4b9f-84bb-5cad4e173112; nested exception javax.persistence.entitynotfoundexception: unable find io.egen.api.entity.wind id 5e022f73-3815-4b9f-84bb-5cad4e173112] root cause  javax.persistence.entitynotfoundexception: unable find io.egen.api.entity.wind id 5e022f73-3815-4b9f-84bb-5cad4e173112     @ org.hibernate.jpa.boot.internal.entitymanagerfactorybuilderimpl$jpaentitynotfounddelegate.handleentitynotfound(entitymanagerfactorybuilderimpl.java:144) ~[hibernate-entitymanager-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.event.internal.defaultloadeventlistener.load(defaultloadeventlistener.java:227) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.event.internal.defaultloadeventlistener.proxyorload(defaultloadeventlistener.java:278) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.event.internal.defaultloadeventlistener.doonload(defaultloadeventlistener.java:121) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.event.internal.defaultloadeventlistener.onload(defaultloadeventlistener.java:89) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.internal.sessionimpl.fireload(sessionimpl.java:1129) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.internal.sessionimpl.internalload(sessionimpl.java:1022) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.type.entitytype.resolveidentifier(entitytype.java:639) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.type.entitytype.resolve(entitytype.java:431) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.type.entitytype.replace(entitytype.java:330) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.type.abstracttype.replace(abstracttype.java:147) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.type.typehelper.replace(typehelper.java:211) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.event.internal.defaultmergeeventlistener.copyvalues(defaultmergeeventlistener.java:438) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.event.internal.defaultmergeeventlistener.entityistransient(defaultmergeeventlistener.java:233) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.event.internal.defaultmergeeventlistener.entityisdetached(defaultmergeeventlistener.java:301) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.event.internal.defaultmergeeventlistener.onmerge(defaultmergeeventlistener.java:170) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.event.internal.defaultmergeeventlistener.onmerge(defaultmergeeventlistener.java:69) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.internal.sessionimpl.firemerge(sessionimpl.java:840) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.internal.sessionimpl.merge(sessionimpl.java:822) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.internal.sessionimpl.merge(sessionimpl.java:827) ~[hibernate-core-5.0.12.final.jar:5.0.12.final]     @ org.hibernate.jpa.spi.abstractentitymanagerimpl.merge(abstractentitymanagerimpl.java:1161) ~[hibernate-entitymanager-5.0.12.final.jar:5.0.12.final]     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) ~[na:1.8.0_121]     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62) ~[na:1.8.0_121]     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) ~[na:1.8.0_121]     @ java.lang.reflect.method.invoke(method.java:498) ~[na:1.8.0_121]     @ org.springframework.orm.jpa.extendedentitymanagercreator$extendedentitymanagerinvocationhandler.invoke(extendedentitymanagercreator.java:347) ~[spring-orm-4.3.7.release.jar:4.3.7.release]     @ com.sun.proxy.$proxy70.merge(unknown source) ~[na:na]     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) ~[na:1.8.0_121]     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62) ~[na:1.8.0_121]     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) ~[na:1.8.0_121]     @ java.lang.reflect.method.invoke(method.java:498) ~[na:1.8.0_121]     @ org.springframework.orm.jpa.sharedentitymanagercreator$sharedentitymanagerinvocationhandler.invoke(sharedentitymanagercreator.java:298) ~[spring-orm-4.3.7.release.jar:4.3.7.release]     @ com.sun.proxy.$proxy70.merge(unknown source) ~[na:na]     @ org.springframework.data.jpa.repository.support.simplejparepository.save(simplejparepository.java:511) ~[spring-data-jpa-1.11.1.release.jar:na]     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) ~[na:1.8.0_121]     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62) ~[na:1.8.0_121]     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) ~[na:1.8.0_121]     @ java.lang.reflect.method.invoke(method.java:498) ~[na:1.8.0_121]     @ org.springframework.data.repository.core.support.repositoryfactorysupport$queryexecutormethodinterceptor.executemethodon(repositoryfactorysupport.java:504) ~[spring-data-commons-1.13.1.release.jar:na]     @ org.springframework.data.repository.core.support.repositoryfactorysupport$queryexecutormethodinterceptor.doinvoke(repositoryfactorysupport.java:489) ~[spring-data-commons-1.13.1.release.jar:na]     @ org.springframework.data.repository.core.support.repositoryfactorysupport$queryexecutormethodinterceptor.invoke(repositoryfactorysupport.java:461) ~[spring-data-commons-1.13.1.release.jar:na]     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:179) ~[spring-aop-4.3.6.release.jar:4.3.6.release]     @ org.springframework.data.projection.defaultmethodinvokingmethodinterceptor.invoke(defaultmethodinvokingmethodinterceptor.java:61) ~[spring-data-commons-1.13.1.release.jar:na]     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:179) ~[spring-aop-4.3.6.release.jar:4.3.6.release]     @ org.springframework.transaction.interceptor.transactioninterceptor$1.proceedwithinvocation(transactioninterceptor.java:99) ~[spring-tx-4.3.7.release.jar:4.3.7.release]     @ org.springframework.transaction.interceptor.transactionaspectsupport.invokewithintransaction(transactionaspectsupport.java:282) ~[spring-tx-4.3.7.release.jar:4.3.7.release]     @ org.springframework.transaction.interceptor.transactioninterceptor.invoke(transactioninterceptor.java:96) ~[spring-tx-4.3.7.release.jar:4.3.7.release]     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:179) ~[spring-aop-4.3.6.release.jar:4.3.6.release]     @ org.springframework.dao.support.persistenceexceptiontranslationinterceptor.invoke(persistenceexceptiontranslationinterceptor.java:136) ~[spring-tx-4.3.7.release.jar:4.3.7.release]     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:179) ~[spring-aop-4.3.6.release.jar:4.3.6.release]     @ org.springframework.data.jpa.repository.support.crudmethodmetadatapostprocessor$crudmethodmetadatapopulatingmethodinterceptor.invoke(crudmethodmetadatapostprocessor.java:133) ~[spring-data-jpa-1.11.1.release.jar:na]     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:179) ~[spring-aop-4.3.6.release.jar:4.3.6.release]     @ org.springframework.aop.interceptor.exposeinvocationinterceptor.invoke(exposeinvocationinterceptor.java:92) ~[spring-aop-4.3.6.release.jar:4.3.6.release]     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:179) ~[spring-aop-4.3.6.release.jar:4.3.6.release]     @ org.springframework.data.repository.core.support.surroundingtransactiondetectormethodinterceptor.invoke(surroundingtransactiondetectormethodinterceptor.java:57) ~[spring-data-commons-1.13.1.release.jar:na]     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:179) ~[spring-aop-4.3.6.release.jar:4.3.6.release]     @ org.springframework.aop.framework.jdkdynamicaopproxy.invoke(jdkdynamicaopproxy.java:213) ~[spring-aop-4.3.6.release.jar:4.3.6.release]     @ com.sun.proxy.$proxy72.save(unknown source) ~[na:na]     @ io.egen.api.serviceimpl.weatherserviceimpl.save(weatherserviceimpl.java:20) ~[classes/:na]     @ io.egen.api.controller.weathercontroller.save(weathercontroller.java:29) ~[classes/:na]     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) ~[na:1.8.0_121]     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62) ~[na:1.8.0_121]     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) ~[na:1.8.0_121]     @ java.lang.reflect.method.invoke(method.java:498) ~[na:1.8.0_121]     @ org.springframework.web.method.support.invocablehandlermethod.doinvoke(invocablehandlermethod.java:205) ~[spring-web-4.3.6.release.jar:4.3.6.release]     @ org.springframework.web.method.support.invocablehandlermethod.invokeforrequest(invocablehandlermethod.java:133) ~[spring-web-4.3.6.release.jar:4.3.6.release]     @ org.springframework.web.servlet.mvc.method.annotation.servletinvocablehandlermethod.invokeandhandle(servletinvocablehandlermethod.java:116) ~[spring-webmvc-4.3.6.release.jar:4.3.6.release]     @ org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter.invokehandlermethod(requestmappinghandleradapter.java:827) ~[spring-webmvc-4.3.6.release.jar:4.3.6.release]     @ org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter.handleinternal(requestmappinghandleradapter.java:738) ~[spring-webmvc-4.3.6.release.jar:4.3.6.release]     @ org.springframework.web.servlet.mvc.method.abstracthandlermethodadapter.handle(abstracthandlermethodadapter.java:85) ~[spring-webmvc-4.3.6.release.jar:4.3.6.release]     @ org.springframework.web.servlet.dispatcherservlet.dodispatch(dispatcherservlet.java:963) ~[spring-webmvc-4.3.6.release.jar:4.3.6.release]     @ org.springframework.web.servlet.dispatcherservlet.doservice(dispatcherservlet.java:897) ~[spring-webmvc-4.3.6.release.jar:4.3.6.release]     @ org.springframework.web.servlet.frameworkservlet.processrequest(frameworkservlet.java:970) ~[spring-webmvc-4.3.6.release.jar:4.3.6.release]     @ org.springframework.web.servlet.frameworkservlet.dopost(frameworkservlet.java:872) ~[spring-webmvc-4.3.6.release.jar:4.3.6.release]     @ javax.servlet.http.httpservlet.service(httpservlet.java:648) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.springframework.web.servlet.frameworkservlet.service(frameworkservlet.java:846) ~[spring-webmvc-4.3.6.release.jar:4.3.6.release]     @ javax.servlet.http.httpservlet.service(httpservlet.java:729) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:230) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:165) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.tomcat.websocket.server.wsfilter.dofilter(wsfilter.java:52) ~[tomcat-embed-websocket-8.5.11.jar:8.5.11]     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:192) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:165) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.springframework.web.filter.requestcontextfilter.dofilterinternal(requestcontextfilter.java:99) ~[spring-web-4.3.6.release.jar:4.3.6.release]     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107) ~[spring-web-4.3.6.release.jar:4.3.6.release]     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:192) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:165) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.springframework.web.filter.httpputformcontentfilter.dofilterinternal(httpputformcontentfilter.java:105) ~[spring-web-4.3.6.release.jar:4.3.6.release]     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107) ~[spring-web-4.3.6.release.jar:4.3.6.release]     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:192) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:165) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.springframework.web.filter.hiddenhttpmethodfilter.dofilterinternal(hiddenhttpmethodfilter.java:81) ~[spring-web-4.3.6.release.jar:4.3.6.release]     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107) ~[spring-web-4.3.6.release.jar:4.3.6.release]     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:192) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:165) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.springframework.web.filter.characterencodingfilter.dofilterinternal(characterencodingfilter.java:197) ~[spring-web-4.3.6.release.jar:4.3.6.release]     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107) ~[spring-web-4.3.6.release.jar:4.3.6.release]     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:192) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:165) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:198) ~[tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:96) [tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:474) [tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:140) [tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:79) [tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:87) [tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:349) [tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.coyote.http11.http11processor.service(http11processor.java:783) [tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.coyote.abstractprocessorlight.process(abstractprocessorlight.java:66) [tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.coyote.abstractprotocol$connectionhandler.process(abstractprotocol.java:798) [tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.tomcat.util.net.nioendpoint$socketprocessor.dorun(nioendpoint.java:1434) [tomcat-embed-core-8.5.11.jar:8.5.11]     @ org.apache.tomcat.util.net.socketprocessorbase.run(socketprocessorbase.java:49) [tomcat-embed-core-8.5.11.jar:8.5.11]     @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1142) [na:1.8.0_121]     @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:617) [na:1.8.0_121]     @ org.apache.tomcat.util.threads.taskthread$wrappingrunnable.run(taskthread.java:61) [tomcat-embed-core-8.5.11.jar:8.5.11]     @ java.lang.thread.run(thread.java:745) [na:1.8.0_121] 

i have make sure json first wind data should added to wind table , using id created weathersensor should updated remaining values. kindly if missing annotation or approach.

edit:-

here controller

@restcontroller @crossorigin public class weathercontroller {     private weatherservice weatherservice;      public weathercontroller(weatherservice weatherservice) {         this.weatherservice = weatherservice;     }      // @requestmapping(method = requestmethod.get)     // public string home() {     // return "welcome!";     // }      @requestmapping(method = requestmethod.post, value = "save")     public weathersensor save(@requestbody weathersensor weathersensor) {         system.out.println(weathersensor.tostring());         weatherservice.save(weathersensor);          return weathersensor;     }} 

and here application.properties

server.port=9000 server.context-path=/api  #database setup spring.datasource.url=jdbc:mysql://localhost:3306/clearsky?usessl=false spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.driver spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.show-sql=true 

and here endpoint iam hitting:-

http://localhost:9000/api/save 

kindly help!

the problem generated new uuid identifier in entities.

the entitymanager merge magic detached objects.

merge creates new instance of entity, copies state supplied entity, , makes new copy managed.

but new instance has new different id means can't found original id.

to solve generate uuid outside of entity / constructor.


Comments

Popular posts from this blog

c# - Update a combobox from a presenter (MVP) -

How to understand 2 main() functions after using uftrace to profile the C++ program? -

How to put a lock and transaction on table using spring 4 or above using jdbcTemplate and annotations like @Transactional? -