Reputation: 227
I'm trying to update the value to table. if newly created and saved date_range_id is working good.but when trying to update the value from existing date_range_id its giving me an error `org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing:'. How to update the value to table both cases ?
DateRange dateRange = new DateRange();
Criteria dateRangeCriteria = session.createCriteria(DateRange.class);
dateRangeCriteria.add(Restrictions.eq("start_date", startDate));
dateRangeCriteria.add(Restrictions.eq("end_date", newendDate));
List drlist = dateRangeCriteria.list();
if(drlist.size()>0){
Iterator it = drlist.iterator();
while(it.hasNext())
{
DateRange std = ( DateRange) it.next();
dateRangeId=std.getDate_range_id();
}
}else{
dateRange.setStart_date(startDate);
dateRange.setEnd_date(newendDate);
session.save(dateRange);
dateRangeId= dateRange.getDate_range_id();
}
Criteria criteria = session.createCriteria(PartFeatureVersion.class);
criteria.add(Restrictions.eq("part.id",partId));
criteria.add(Restrictions.eq("featureversion.id", featureVersionId));
criteria.add(Restrictions.eq("dateRange.id", dateRangeID));
List list = criteria.list();
PartFeatureVersion partfeatureversion = (PartFeatureVersion)list.iterator().next();
//partfeatureversion.setDate_range_id(dateRangeId);
partfeatureversion.setDateRange(dateRange);
session.saveOrUpdate(partfeatureversion);
Upvotes: 0
Views: 795
Reputation: 17854
In the case of the existing range, the object dateRange is never set, it's still the 'new DateRange()' it was initialized on.
This should be better:
DateRange dateRange;
if(...){
dateRange = (DateRange)it.next();
}
else{
dateRange = new DateRange();
...
session.save(dateRange);
}
Also, you don't need to keep the dateRangeId, you can use the object itself in a Restriction, and it will take the id behind the screens:
criteria.add(Restrictions.eq("dateRange", dateRange));
Upvotes: 1