现在的位置: 首页 > 综合 > 正文

detached entity passed to persist: 问题的解决

2013年08月16日 ⁄ 综合 ⁄ 共 1331字 ⁄ 字号 评论关闭
在结构中使用了OneToOne的表单映射。
但是在保存主,子表的时候,发生 detached entity passed to persist: 的错误。
解决办法:
去掉主表中     
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.GeneratedValue;
@GenericGenerator(name = "generator", strategy = "uuid")
@GeneratedValue(generator = "generator")
这个注释。
原意是使用 hibernate uuid 来进行自动id的赋值。但是hibernate 3.3版本好像有问题。无法完成自动功能。
只能使用如下代码来进行id复制。
  1.   public boolean addUserInfo(AlcorTUser alcorUser) throws Exception{
  2.         String userID = UUID.randomUUID().toString();
  3.         alcorUser.setUserid(userID);
  4.         alcorUser.setPassword("password");
  5.         alcorUser.setLoginCount(0);
  6.         alcorUser.setLastLogin(new Date());
  7.         alcorUser.getAlcorTUserDetail().setUserid(userID);
  8.         /*Iterator<AlcorTUserDetail> userDetailIterator =  alcorUser.getAlcorTUserDetails().iterator();
  9.         logger.debug("含有"+alcorUser.getAlcorTUserDetails().toArray().length+"个用户详细信息");
  10.         while (userDetailIterator.hasNext())
  11.         {
  12.             userDetailIterator.next().setUserid(userID);
  13.             //this.alcorTUserDetailDAO.save(userDetailIterator.next()) ;
  14.         }*/
  15.         this.alcorTUserDAO.save(alcorUser);
  16.        
  17.         return true;
  18.     }

其中 alcorUser 是主表, alcorUserDetail是子表,是OneToOne的映射。

传入的alcorUser对象是flex通过lcds传入。已经在flex这端。把一个子表内容的对象放入到这个主表内容的对象中去了。所以在这里只要对主表进行save,自动的会对子表也进行保存。
中间屏蔽的这端是处理OneToMany的方法。使用了Iterator。在POJO这端通过HashSet来定义。

抱歉!评论已关闭.