こんにちは、私はhibernetを初めて使用します。CloudSql にデータを挿入しようとしていますが、org.hibernate.HibernateException が発生しました。コレクションを 2 つの開いているセッションに関連付けようとする不正な試みです。私のコードを確認してください。
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**
} 組織.java
@Entity
@Table(name="TBL_STD_ORGANIZATION")
public class Organization {
@Id
@GeneratedValue
@Column(name="FLD_ORG_ID")
private Long organizationId;
@Column(name="FLD_ORG_NAME")
private String orgName;
@OneToMany
private java.util.Collection<Department> listOfDepartMents = new java.util.ArrayList<Department>();
@Column(name = "FLD_CUSTOMER_ID")
private Long customerId;
@ManyToOne
private Domain domain;
public Long getOrganizationId() {
return organizationId;
}
public void setOrganizationId(Long organizationId) {
this.organizationId = organizationId;
}
public String getOrgName() {
return orgName;
}
public void setOrgName(String orgName) {
this.orgName = orgName;
}
public java.util.Collection<Department> getListOfDepartMents() {
return listOfDepartMents;
}
public void setListOfDepartMents(
java.util.Collection<Department> listOfDepartMents) {
this.listOfDepartMents = listOfDepartMents;
}
public Long getCustomerId() {
return customerId;
}
public void setCustomerId(Long customerId) {
this.customerId = customerId;
}
public Domain getDomain() {
return domain;
}
public void setDomain(Domain domain) {
this.domain = domain;
}
UserProfile.java _
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
}
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);
}
しかし、オブジェクトを保存しようとしているときに得た
警告: exception..org.hibernate.HibernateException: コレクションを 2 つの開いているセッションに関連付けようとする不正な試み 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) at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:78) at org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:146) org.hibernate.event.def.DefaultSaveOrUpdateEventListener.org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246) の performUpdate(DefaultSaveOrUpdateEventListener.java:316) 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. com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115) で java.lang.reflect.Method.invoke(Method.java:597) で invoke(DelegatingMethodAccessorImpl.java:25) 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.org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) のハンドル (AnnotationMethodHandlerAdapter.java:428) 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.org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) の socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) com.google.appengine.tools.development.ResponseRewriterFilter.doFilter( ResponseRewriterFilter.java:123) の org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) の com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) の org .mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) at org.mortbay.jetty.servlet .ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) com.google.apphosting.utils.servlet.TransactionCleanupFilter で。org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) の doFilter(TransactionCleanupFilter.java:43) com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) の doFilter(TransactionCleanupFilter.java:43) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) で com.google.appengine.tools.development.DevAppServerServersFilter.doDirectRequest(DevAppServerServersFilter.java:369) で com.google.appengine.tools .development.DevAppServerServersFilter.doDirectServerRequest(DevAppServerServersFilter.java:352) の com.google.appengine.tools.development.DevAppServerServersFilter.doFilter(DevAppServerServersFilter.java:115) の org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler) .java:1157) org.mortbay.jetty.servlet.ServletHandler で。org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) のハンドル (ServletHandler.java:388) org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) の org.mortbay .jetty.handler.ContextHandler.handle(ContextHandler.java:765) で org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) で com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext) .java:94) org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) で com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:421) で org. org.mortbay.jetty.HttpConnection の org.mortbay.jetty.Server.handle(Server.java:326) の mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)。org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) での handleRequest(HttpConnection.java:542) org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) で org.mortbay.jetty .HttpParser.parseAvailable(HttpParser.java:212) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org. mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
助けてください