当前位置: 首页 > 知识库问答 >
问题:

Hibernate标准组织。冬眠TransientObjectException:对象引用未保存的临时实例

鲍国兴
2023-03-14

我正在尝试将值更新到表中。如果新创建和保存的日期范围id工作正常。但是当试图更新现有日期范围id的值时,它会给我一个错误“org”。冬眠TransientObjectException:对象引用未保存的临时实例-在刷新之前保存临时实例:'。如何更新两种情况下的表值?

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);

共有1个答案

丁和歌
2023-03-14

在现有范围的情况下,对象dateRange永远不会设置,它仍然是初始化的“new DateRange()”。

这应该更好:

DateRange dateRange;
if(...){
   dateRange = (DateRange)it.next();
}
else{
   dateRange = new DateRange();
   ...
   session.save(dateRange);
}

此外,您不需要保留dateRangeId,您可以在限制中使用对象本身,它将在屏幕后面获取id:

criteria.add(Restrictions.eq("dateRange", dateRange));
 类似资料: