如何解决org.hibernate.HibernateException:非法尝试将集合与两个打开的会话关联?
您好,我是hibernet的新手我试图在CloudSql中插入数据,但我得到了org.hibernate.hibernateeException:非法尝试将集合与两个打开的会话关联 请检查我的密码如何解决org.hibernate.HibernateException:非法尝试将集合与两个打开的会话关联?,hibernate,spring-mvc,Hibernate,Spring Mvc,您好,我是hibernet的新手我试图在CloudSql中插入数据,但我得到了org.hibernate.hibernateeException:非法尝试将集合与两个打开的会话关联 请检查我的密码 Domain.java @Entity @Table(name="TBL_STD_DOMAIN") public class Domain { @Id @GeneratedValue @Column(name ="FLD_DOMAIN_ID") private Long domainId;
Domain.java
@Entity
@Table(name="TBL_STD_DOMAIN")
public class Domain {
@Id
@GeneratedValue
@Column(name ="FLD_DOMAIN_ID")
private Long domainId;
@Column(name = "FLD_DOMAIN_NAME")
private String domainName;
@Column(name = "FLD_PRIMAY_DOMAIN_ID")
private Long primary_Domain_Id;
@Column(name = "FLD_CUSTOMER_ID")
private Long customerId;
@Column(name = "FLD_IS_ACTIVE")
@org.hibernate.annotations.Type(type="true_false")
private boolean isActive;
@Column(name = "FLD_ISPRIMARYDOMAIN")
@org.hibernate.annotations.Type(type="true_false")
private boolean isPrimayDomain;
@OneToMany( mappedBy="domain",cascade=CascadeType.ALL )
@JoinTable(name = "Domain_UserProfile",
joinColumns = { @JoinColumn(name = "FLD_DOMAIN_ID") },
inverseJoinColumns = { @JoinColumn(name = "FLD_USERPROFILE_ID") })
private Collection<UserProfile> userProfile = new ArrayList<UserProfile>();
@OneToMany( mappedBy="domain",cascade=CascadeType.ALL )
@JoinTable(name = "Domain_Organization",
joinColumns = { @JoinColumn(name = "FLD_DOMAIN_ID") },
inverseJoinColumns = { @JoinColumn(name = "FLD_ORG_ID") })
private Collection<Organization> orgnization = new ArrayList<Organization>();
//**SETTER AND GEETER METHODS**
}
MyGenericDAo
public abstract class GenericDaoImpl <T> extends HibernateDaoSupport implements IGenericDao<T> {
private static final Logger log = Logger.getLogger(GenericDaoImpl.class.getName());
@Autowired
public void setHibernateSessionFactory(SessionFactory sessionFactory)
{
setSessionFactory(sessionFactory);
}
@Override
public T save(T t) {
//getHibernateTemplate().save(t);
//getHibernateTemplate().saveOrUpdate(t);
Session session = getSessionFactory().openSession();
Transaction tx=session.beginTransaction();
session.saveOrUpdate(t);
tx.commit();
session.close();
return t;
}
@Override
public T merge(T t) {
//getHibernateTemplate().save(t);
//getHibernateTemplate().saveOrUpdate(t);
Session session = getSessionFactory().openSession();
session.beginTransaction();
session.merge(t);
session.close();
return t;
}
@Override
public void delete(T t) {
getSession().delete(t);
}
public抽象类GenericDaoImpl扩展了HibernateDaoSupport实现了IGenericDao{
私有静态最终记录器log=Logger.getLogger(GenericDaoImpl.class.getName());
@自动连线
公共无效设置HibernateSessionFactory(SessionFactory SessionFactory)
{
设置会话工厂(会话工厂);
}
@凌驾
公共T存储(T T){
//getHibernateTemplate().save(t);
//getHibernateTemplate().saveOrUpdate(t);
会话会话=getSessionFactory().openSession();
事务tx=会话.beginTransaction();
会话.saveOrUpdate(t);
tx.commit();
session.close();
返回t;
}
@凌驾
公共T合并(T T){
//getHibernateTemplate().save(t);
//getHibernateTemplate().saveOrUpdate(t);
会话会话=getSessionFactory().openSession();
session.beginTransaction();
合并(t);
session.close();
返回t;
}
@凌驾
公共作废删除(T){
getSession().delete(t);
}
}
但当我试图保存我得到的对象时
警告:异常..org.hibernate.HibernateException:非法尝试将集合与两个打开的会话关联
org.hibernate.HibernateException:非法尝试将集合与两个打开的会话关联
位于org.hibernate.collection.AbstractPersistentCollection.setCurrentSession(AbstractPersistentCollection.java:432)
位于org.hibernate.event.def.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:66)
位于org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:124)
位于org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:84)
位于org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:78)
位于org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:146)
位于org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:316)
在org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246)
位于org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:112)
位于org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
位于org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:535)
位于org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:527)
位于org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:523)
位于com.cloudcodes.gdirectory.daoImpl.GenericDaoImpl.save(GenericDaoImpl.java:36)
位于com.cloudcodes.gdirectory.managerImpl.GenericServiceManagerImpl.save(GenericServiceManagerImpl.java:26)
位于com.cloudcodes.gdirectory.controller.ProfileController.profileSynch(ProfileController.java:401)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于com.google.appengine.tools.development.agent.runtime.runtime.invoke(runtime.java:115)
位于org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
位于org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
位于org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
位于org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
位于org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
位于org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
位于org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
位于org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
位于org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
位于com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
位于com.google.appengine.tools.development.ResponseWriterFilter.doFilter(responseWriterFilter.java:123)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
位于com.google.appengine.tools.development.headerficationfilter.doFilter(headerficationfilter.java:34)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
在com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter上(ServeBlobFilter.java:63)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
位于com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
位于com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
在com.google.appengine.tools.developme上
Entity
@Table(name="TBL_STD_USERPROFILE")
public class UserProfile {
@Id
@GeneratedValue
@Column(name = "FLD_USER_ID")
private Long userId;
@Column(name = "FLD_CREATED_ON")
@Temporal(TemporalType.DATE)
private Date createdOn;
@Column(name = "FLD_IMAGE_BLOB_KEY")
private String imageBlobKey;
@Column(name = "FLD_LASTMODIFIED_ON")
@Temporal(TemporalType.DATE)
private Date lastModifiedOn;
@ManyToOne
private Domain domain;
//SETTER ,GETTER METHODS
public abstract class GenericDaoImpl <T> extends HibernateDaoSupport implements IGenericDao<T> {
private static final Logger log = Logger.getLogger(GenericDaoImpl.class.getName());
@Autowired
public void setHibernateSessionFactory(SessionFactory sessionFactory)
{
setSessionFactory(sessionFactory);
}
@Override
public T save(T t) {
//getHibernateTemplate().save(t);
//getHibernateTemplate().saveOrUpdate(t);
Session session = getSessionFactory().openSession();
Transaction tx=session.beginTransaction();
session.saveOrUpdate(t);
tx.commit();
session.close();
return t;
}
@Override
public T merge(T t) {
//getHibernateTemplate().save(t);
//getHibernateTemplate().saveOrUpdate(t);
Session session = getSessionFactory().openSession();
session.beginTransaction();
session.merge(t);
session.close();
return t;
}
@Override
public void delete(T t) {
getSession().delete(t);
}