码迷,mamicode.com
首页 > Web开发 > 详细

org.hibernate.ObjectDeletedException: deleted obje

时间:2015-07-08 19:13:35      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [ac.iie.dsm.db.model.PlatformUser#1]

 at org.hibernate.internal.SessionImpl.forceFlush(SessionImpl.java:1236)

 at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:187)

 at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114)

 at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)

 at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:684)

 at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:676)

 at org.hibernate.engine.spi.CascadingActions$5.cascade(CascadingActions.java:235)

 at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:350)

 at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:293)

 at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:161)

 at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:379)

 at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:319)

 at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:296)

 at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:161)

 at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:118)

 at org.hibernate.event.internal.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:167)

 at org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:158)

 at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:91)

 at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55)

 at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)

 at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)

 at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)

 at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)

 at org.springframework.orm.hibernate4.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:555)

 at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:757)

 at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:726)

 at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:478)

 at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:272)

 at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)

 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)

 at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)

 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)

 at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644)

 at ac.iie.dsm.service.impl.PlatformUserServiceImpl$$EnhancerBySpringCGLIB$$ee0c45e2.delete(<generated>)

 at ac.iie.dsm.web.controller.PlatformController.delete(PlatformController.java:185)

 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

 at java.lang.reflect.Method.invoke(Unknown Source)

 at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)

 at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)

 at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)

 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)

 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)

 at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)

 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)

 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)

 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)

 at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)

 at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)

 at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)

 at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)

 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)

 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

 at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)

 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)

 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)

 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)

 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)

 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)

 at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)

 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)

 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)

 at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)

 at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)

 at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2476)

 at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2465)

 at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

 at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

 at java.lang.Thread.run(Unknown Source)

 

PlatformRole.java

@Entity
@Table(name = "dsm_ROLE")
public class PlatformRole extends DsmObject {
 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 @Column
 private Integer role_id;
 @Column
 private String role_name;
 @Column
 private Integer role_class;
 @ManyToMany(mappedBy = "roles",fetch = FetchType.EAGER,cascade = CascadeType.ALL)
 private Set<PlatformUser> users = new HashSet<>();
 // 饥渴加载,在管理角色同时能够加载出相应的权限
 @ManyToMany(fetch = FetchType.EAGER,cascade = CascadeType.MERGE)
 @JoinTable(name = "dsm_role_pri", joinColumns = { @JoinColumn(name = "rid") }, inverseJoinColumns = { @JoinColumn(name = "pid") })
 private Set<PlatformPrivilege> pris;
 public Integer getRole_id() {
  return role_id;
 }
 public void setRole_id(Integer role_id) {
  this.role_id = role_id;
 }
 public String getRole_name() {
  return role_name;
 }
 public void setRole_name(String role_name) {
  this.role_name = role_name;
 }
 public Integer getRole_class() {
  return role_class;
 }
 public void setRole_class(Integer role_class) {
  this.role_class = role_class;
 }
 public PlatformRole(Integer role_id, String role_name, Integer role_class) {
  super();
  this.role_id = role_id;
  this.role_name = role_name;
  this.role_class = role_class;
 }
 public PlatformRole() {
 }
 public Set<PlatformUser> getUsers() {
  return users;
 }
 public void setUsers(Set<PlatformUser> users) {
  this.users = users;
 }
 public Set<PlatformPrivilege> getPris() {
  return pris;
 }
 public void setPris(Set<PlatformPrivilege> pris) {
  this.pris = pris;
 }
}

PlatformUser.java

@Entity
@Table(name = "dsm_USER")
public class PlatformUser extends DsmObject {
 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 @Column
 private Integer userid;
 @Column
 private String username;
 @Column
 private String password;
 @Column
 private String work_id;
 @ManyToOne(cascade = {CascadeType.MERGE}, fetch = FetchType.EAGER)
 @JoinColumn(name = "org_id")
 private PlatformOrganization org_id;
 // 饥渴加载,在加载用户信息同时加载角色信息
 @ManyToMany(fetch = FetchType.EAGER,cascade = {CascadeType.MERGE})
 @JoinTable(name = "dsm_user_role", joinColumns = { @JoinColumn(name = "userid") }, inverseJoinColumns = { @JoinColumn(name = "rid") })
 private Set<PlatformRole> roles = new HashSet<>();
 @Column
 private String telephone;
 public Integer getUserid() {
  return userid;
 }
 public void setUserid(Integer userid) {
  this.userid = userid;
 }
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public Set<PlatformRole> getRoles() {
  return roles;
 }
 public void setRoles(Set<PlatformRole> roles) {
  this.roles = roles;
 }
 public String getWork_id() {
  return work_id;
 }
 public void setWork_id(String work_id) {
  this.work_id = work_id;
 }
 public PlatformOrganization getOrg_id() {
  return org_id;
 }
 public void setOrg_id(PlatformOrganization org_id) {
  this.org_id = org_id;
 }
 public String getTelephone() {
  return telephone;
 }
 public void setTelephone(String telephone) {
  this.telephone = telephone;
 }
 public PlatformUser() {
 }
}

修改的地方为:将PlatformRole中的users 加载设置为lazy

@ManyToMany(mappedBy = "roles",fetch = FetchType.LAZY,cascade = CascadeType.ALL)

 private Set<PlatformUser> users = new HashSet<>();

org.hibernate.ObjectDeletedException: deleted obje

标签:

原文地址:http://my.oschina.net/duanvincent/blog/476284

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!