JPA异常:org.hibernate.PersistentObjectException: detached entity passed to persist

BigBird2012 2010-05-02 08:39:56
这几天老遇到这个异常,还是没有解决,请各位帮忙看下:
(1)异常信息:
org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: com.myproject.hrsystem.entity.Post; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: com.myproject.hrsystem.entity.Post

(2)我配的是多对多关系:
Department类:
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "TBL_DeptPost", joinColumns = { @JoinColumn(name = "dept_ID") }, inverseJoinColumns = { @JoinColumn(name = "post_Id") })
public Set<Post> getPosts() {
return posts;
}
Post类:
@ManyToMany(mappedBy = "posts",cascade = CascadeType.ALL)
public Set<Department> getDepartments() {
return departments;
}
(3)报错代码:
Set<Post> posts = new HashSet<Post>();
Company cmp = new Company();// 设置公司信息
cmp.setCmpId(1);
String[] postIds = request.getParameterValues("select2");// 获取部门ID
// 如果职位ID数组不为空,则循环遍历职位数组,取出职位ID
if (StringUtil.isNullOrEmpty(postIds)) {
for (String s : postIds) {
Integer pid = Integer.parseInt(s); // 获取职位ID
Post tempPost = new Post();
System.out.println("职位ID:-----"+pid);
tempPost.setPostId(pid);
posts.add(tempPost); // 将职位信息添加到集合中
}
}
dept.setPosts(posts);// 所属职位
dept.setCmp(cmp);// 所属公司
dept.setEmpId(empId);// 部门经理
dept.setAddId(empId);// 建立人
dept.setAddTime(new Date());// 建立时间
dept.setDelSt(0);// 删除标识

我使用的persist方法保存,要是给部门不添加职位的话还可以添加部门信息,但一添加职位就报错了
...全文
5745 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zouyuntang 2012-06-27
  • 打赏
  • 举报
回复
同样问题
Golotus 2011-11-11
  • 打赏
  • 举报
回复
谢谢三楼的回答,解决问题了,帮了大忙了
与上帝接吻 2011-07-19
  • 打赏
  • 举报
回复
也遇到同样问题
lxy15329 2011-04-25
  • 打赏
  • 举报
回复
感激三楼的,我也遇到了问题,用你的方法解决了,没想到这级联方式还有这么大的讲究啊
duxingke001 2011-02-15
  • 打赏
  • 举报
回复
检查一下你的主键是否是自动生成的,若是自动生成的,但是你又在程序中制定了该字段的值,也会出现这种错误
unkowme 2010-07-06
  • 打赏
  • 举报
回复
楼主, 要怎么设呢? 我现在也有这样的问题。
hy_dl 2010-05-02
  • 打赏
  • 举报
回复
远征军同学,好好总结一下级联
BigBird2012 2010-05-02
  • 打赏
  • 举报
回复
三楼的,谢谢你了!还真的是级联方式不正确!
howsun_zh 2010-05-02
  • 打赏
  • 举报
回复
貌似是级联配置不对:
把cascade = CascadeType.ALL 改成 cascade=CascadeType.REFRESH 测一下看看。
BigBird2012 2010-05-02
  • 打赏
  • 举报
回复
我仔细检查了一下,我的实体类并没有问题啊,主键生成策略我是Identity:

Department类:

@Id
@Column(name = "dept_ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getDeptId() {
return deptId;
}


Post类:

@Id
@Column(name = "post_Id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getPostId() {
return postId;
}

我的数据库是MySql
justchenjie 2010-05-02
  • 打赏
  • 举报
回复
http://blog.csdn.net/zhoutao198712/archive/2009/05/14/4184517.aspx

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧