在结构中使用了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复制。
- public boolean addUserInfo(AlcorTUser alcorUser) throws Exception{
- String userID = UUID.randomUUID().toString();
- alcorUser.setUserid(userID);
- alcorUser.setPassword("password");
- alcorUser.setLoginCount(0);
- alcorUser.setLastLogin(new Date());
- alcorUser.getAlcorTUserDetail().setUserid(userID);
- /*Iterator<AlcorTUserDetail> userDetailIterator = alcorUser.getAlcorTUserDetails().iterator();
- logger.debug("含有"+alcorUser.getAlcorTUserDetails().toArray().length+"个用户详细信息");
- while (userDetailIterator.hasNext())
- {
- userDetailIterator.next().setUserid(userID);
- //this.alcorTUserDetailDAO.save(userDetailIterator.next()) ;
- }*/
- this.alcorTUserDAO.save(alcorUser);
- return true;
- }
其中 alcorUser 是主表, alcorUserDetail是子表,是OneToOne的映射。
传入的alcorUser对象是flex通过lcds传入。已经在flex这端。把一个子表内容的对象放入到这个主表内容的对象中去了。所以在这里只要对主表进行save,自动的会对子表也进行保存。
中间屏蔽的这端是处理OneToMany的方法。使用了Iterator。在POJO这端通过HashSet来定义。