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
Post a Comment