`
nijiaben
  • 浏览: 129138 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Flex+Hibernate无法级联操作解决方案

    博客分类:
  • Flex
阅读更多
    本文最初发布在http://www.lovestblog.cn,转载请注明出处,谢谢合作。
    最近在忙一个项目,使用的是Flex+Spring+Hibernate,期间碰到一个问题,有必要在此记录一下,也方便有相似问题的来者参考下
    问题描述:有一个用户表和一个用户详情表,这两个表是一个一对一的单向关联关系,即在用户表中一个外键引用用户详情表,我在UserInfo的映射文件中使用的是many-to-one,设置了unique="true"表示一对一关系,设置了cascade="save-update"表示的是在保存useInfo对象的时候会自动保存与之关联的userDetails临时对象,即我希望的是先执行一个在用户详情表中的插入语句然后再执行一个在用户表中的插入语句,userInfo对象是从flex端传过来的,当然也设置了userDetails属性的值,在userInfo的dao文件中save方法是这样的
public IvUserInfo save(IvUserInfo transientInstance) {
	log.debug("saving IvUserInfo instance");
		try {
			getHibernateTemplate().save(transientInstance);
			log.debug("save successful");
		} catch (RuntimeException re) {
			log.error("save failed", re);
			throw re;
		}
		return transientInstance;
	}

后面发现执行的sql语句只有一条插入语句,就是在用户表中的一个插入,由于外键的关联作用,是用户表的这条插入也无法执行,这就是问题所在了。
    问题解决:这个问题我也没有具体研究Hibernate的源码,我先写了个测试类,发现仅仅在java中执行操作的话是可以正确执行两条插入语句的,但是通过flex传过来就有问题了,那说明是flex端传参数过来的问题,于是我试着修改UserInfo的save方法:
public IvUserInfo save(IvUserInfo transientInstance) {
		log.debug("saving IvUserInfo instance");
		try {
			IvUserDetails ud=new IvUserDetails();
	ud.setQq(transientInstance.getIvUserDetails().getQq());
			transientInstance.setIvUserDetails(ud);
getHibernateTemplate().save(transientInstance);
			log.debug("save successful");
		} catch (RuntimeException re) {
			log.error("save failed", re);
			throw re;
		}
		return transientInstance;
	}

这样一来问题解决了,顺利执行了两条插入语句。
       如果朋友知道具体原因的话希望给我留言了,同时也希望该记录能帮助碰到此类问题的朋友。
1
1
分享到:
评论
1 楼 wm_jeye 2011-05-15  
你好,我现在做的项目遇到这问题了,用的是hibernate annotation级联,前台的ArrayCollection传递到后台就变为了ASObject类型对象了,希望你能帮到我

相关推荐

Global site tag (gtag.js) - Google Analytics