java - Not-null property references a transient value transient instance must be saved before current operation -


i having table product in table 1 of foreign key dimension_id. while writing test case in service layer shows error. test case

@transactional(propagation = propagation.required)     private productbo getproductbo() {         sellerbo sellerbo = getsellerbo();         productbo productbo = new productbo();         productbo.setcategoryid(1);         productbo.setdateavailable("20/00/0000");         productbo.setimage("a15cb5e");         productbo.setlocation("for getting product details");         productbo.setminimum(26.00);         productbo.setmodel("service");         productbo.setpoints(5);         productbo.setprice(12.2f);         productbo.setquantity("2");         productbo.setsellerbo(sellerbo);         productbo.setshipping(2);         productbo.setsku("aqaqaq");         productbo.setsortorder("aes");         productbo.setstatus(1);         productbo.setstockstatusid("20");         productbo.setproductname("micromax");         productbo.setsubtract(20.0001);         productbo.setupc("asd");         productbo.setviewed(2);         productbo.setweight("25");         productbo.setweightclassbo(getweightclassbo(productbo));         productbo.setdimensionbo(getdimension());         return productbo;     }   public dimensionbo getdimension() {         dimensionbo dimensionbo = new dimensionbo();         dimensionbo.setheight(12);         dimensionbo.setlength(23);         dimensionbo.setwidth(14);         dimensionbo.setlengthclassbo(getlengthclass());         try {             managedimensionserviceimpl.adddimension(dimensionbo);         } catch (crafartserviceexception csexp) {             csexp.printstacktrace();             assert.fail();         }          return dimensionbo;      } 

this dimensionimpl

@override     @transactional(propagation = propagation.required)     public void adddimension(dimensionbo dimensionbo) throws crafartserviceexception {          dimensiondo dimensiondo = beanmapper.mapdimensionbotodo(dimensionbo, new dimensiondo(), beanmapper.maplengthclassbotodo(dimensionbo.getlengthcassbo(), new lengthclassdo()));         try {              dimensiondaoimpl.adddimension(dimensiondo);             dimensionbo.setdimensionid(dimensionbo.getdimensionid());             //lengthclassdo lengthclassdo = lengthclassdaoimpl.getlengthclass(dimensionbo.getlengthcassbo().getlengthclassid());             //dimensiondo.setlengthclassdo(lengthclassdo);         } catch (crafartdataexception e) {             throw new crafartserviceexception("error while adding dimension", e);          }      } 

this dimensiondaoimpl

@override     @transactional(propagation = propagation.required)     public void adddimension(dimensiondo dimensiondo) throws crafartdataexception {         try {             session session = this.getsessionfactory().getcurrentsession();             session.persist(dimensiondo);         } catch (hibernateexception hexp) {             throw new crafartdataexception("db error while adding dimension details in table", hexp);         }     }  } 

do bo mapping

public dimensionbo mapdimensiondotobo(dimensiondo dimensiondo,dimensionbo dimensionbo,lengthclassbo lengthclassbo) {         dimensionbo.setdimensionid(dimensionbo.getdimensionid());         dimensionbo.setheight(dimensionbo.getheight());         dimensionbo.setlength(dimensionbo.getlength());         dimensionbo.setwidth(dimensionbo.getwidth());         dimensionbo.setlengthclassbo(lengthclassbo);         return dimensionbo;     } 

bo mapping

public dimensiondo mapdimensionbotodo(dimensionbo dimensionbo, dimensiondo dimensiondo ,lengthclassdo lengthclassdo)  {         dimensiondo.setdimensionid(dimensiondo.getdimensionid());         dimensiondo.setheight(dimensiondo.getheight());         dimensiondo.setlength(dimensiondo.getlength());         dimensiondo.setwidth(dimensiondo.getwidth());         dimensiondo.setlengthclassdo(lengthclassdo);          return dimensiondo;     } 

the exception getting not-null property references transient value transient instance must saved before current operation means while persisting dimensiondo object, there relation of thi object references non-persisted (that transient) object, , can not manage foreign key.

your code doesn't show can relation. maybe when map dimensiobo dimensiondo create new instance have persist before.

on other hand, in productbo have 2 reference new instances, 1 sellerbo , 1 dimensionbo. don't show code product persistence ...


Comments