Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux集群 > Architecture > » 正文

Hibernate :Found shared references to a collection

来源: 未知 分享至:

Session session=getSessionFactory().getCurrentSession();
		Question q=(Question)session.get(Question.class, id);

	Question_Engineer qe=new Question_Engineer();
		qe.setAdminUser(q.getAdminUser());
		qe.setContent(q.getContent());
		qe.setCreatTime(DateFormat.DateToStringD());
		qe.setDepartment(q.getDepartment());
		qe.setDoUser(q.getDoUser());
		qe.setFiles(files);
		qe.setIp(q.getIp());
		qe.setModule(module);
		qe.setPhone(q.getPhone());
		qe.setQuestionId(q.getQuestionId());
		qe.setReportTime(q.getReportTime());
		qe.setResolve(q.getResolve());
		qe.setState(q.getState());
		qe.setStatus(q.getStatus());
		qe.setTitle(q.getTitle());
		qe.setUser(user);

然后又做持久

org.hibernate.Transaction tx = session.beginTransaction();  
		try{
			//存储monitoringLog
			session.save(qe);  
			//刷新缓存
			session.flush(); 
			//提交事务
			tx.commit();   
		}catch (Exception e) {
			e.printStackTrace();
			//异常回滚
			tx.rollback();
		}finally{
			//关闭连接
			session.close();  
		}

就在session.flush(); 抛了异常

遇到这个问题原因是:1.表之间有关联。在复制数据。

3,你用了hibernate,并在复制数据时将要复制的数据对象A的所有属性赋给了对象B。

解决方案:

将那些关联的数据也复制一遍,并更新B的那些关联对象。这些关联数据中的一个或多个为空时也必须更新B中相应的关联对象

于是:

Module module=new Module();
		List<UploadFile> files = new ArrayList<UploadFile>();
		User user=q.getUser();
		try {
			BeanUtils.copyProperties(module, q.getModule());
			BeanUtils.copyProperties(user, q.getUser());
			BeanUtils.copyProperties(files, q.getFiles());
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

然后set进去就不会出现该问题


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史