1 Reply Latest reply on May 14, 2007 6:44 AM by Andrew Dale

    Hibernate3: Cannot simultaneously fetch multiple bags

    Eric Chow Apprentice

      Hello,

      I don't know why it will raise the "Cannot simultaneously fetch multiple bags" exception, please help and teach me how can I solve the problem?

      @Entity
      @Table(name="EventNotes")
      public class Notes implements Serializable {
       public static final long serialVersionUID = 1L;
      
       protected long id;
       protected User creator;
      
      
       /**
       * @return the creator
       */
       @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
       @JoinTable(name="USER_NOTES",
       joinColumns = @JoinColumn(name="NOTES_ID"),
       inverseJoinColumns = @JoinColumn(name="USER_ID")
       )
       public User getCreator() {
      
       return this.creator;
       }
      
       /**
       * @param creator the creator to set
       */
       public void setCreator(User creator) {
      
       this.creator = creator;
       }
      
      
      
       /**
       * @return the id
       */
       @Id
       @GeneratedValue(strategy = GenerationType.AUTO)
       public long getId() {
      
       return this.id;
       }
      
       /**
       * @param id the id to set
       */
       public void setId(long id) {
      
       this.id = id;
       }
      
      
      }
      


      @Entity
      @Table(name="USERS")
      public class User implements Serializable {
       public static final long serialVersionUID = 1L;
      
       private String username;
      
       private String password;
      
      
       private String firstName;
       private String lastName;
       private String displayName;
       private String gender;
      
      
       private boolean activate;
      
       private Collection<Role> roles = new ArrayList<Role>();
       private Collection<Group> groups = new ArrayList<Group>();
      
      
      
      
       @Transient
       public boolean isActivate() {
       return activate;
       }
      
      
       public boolean getActivate() {
       return activate;
       }
      
       public void setActivate(boolean activate) {
       this.activate = activate;
       }
      
       public String getPassword() {
       return password;
       }
      
       public void setPassword(String password) {
       this.password = password;
       }
      
       @Id
       //@GeneratedValue(strategy = GenerationType.AUTO)
       public String getUsername() {
       return username;
       }
      
       public void setUsername(String username) {
       this.username = username;
       }
      
      
      
       public String getFirstName() {
       return firstName;
       }
      
       public void setFirstName(String firstName) {
       this.firstName = firstName;
       }
      
       public String getLastName() {
       return lastName;
       }
      
       public void setLastName(String lastName) {
       this.lastName = lastName;
       }
      
      
      
      
       public String getDisplayName() {
       return displayName;
       }
      
       public void setDisplayName(String displayName) {
       this.displayName = displayName;
       }
      
      
      
      
      
       public String getGender() {
       return gender;
       }
      
       public void setGender(String gender) {
       this.gender = gender;
       }
      
       @ManyToMany(cascade = {CascadeType.REMOVE},
       fetch = FetchType.EAGER,
       targetEntity=Role.class)
       @JoinTable(
       name="USER_ROLE_LINK",
       joinColumns={@JoinColumn(name="username")},
       inverseJoinColumns={@JoinColumn(name="rolename")}
       )
       public Collection<Role> getRoles() {
       return roles;
       }
      
      
       public void setRoles(Collection<Role> roles) {
       this.roles = roles;
       }
      
       @Transient
       public void addRole(Role role) {
       this.roles.add(role);
       }
      
      
       @ManyToMany(cascade = {CascadeType.REMOVE},
       fetch = FetchType.LAZY,
       targetEntity=Group.class)
       @JoinTable(
       name="USER_GROUP_LINK",
       joinColumns={@JoinColumn(name="username")},
       inverseJoinColumns={@JoinColumn(name="groupname")}
       )
       public Collection<Group> getGroups() {
       return groups;
       }
      
      
      
       public void setGroups(Collection<Group> groups) {
       this.groups = groups;
       }
      
       @Transient
       public void addGroup(Group group) {
       groups.add(group);
       }
      
      
      
       @Transient
       public String toString() {
       StringBuffer buf = new StringBuffer();
      
       buf.append("=== " + username + "===\n");
       buf.append(displayName + "\n");
      
       Iterator rs = roles.iterator();
       while(rs.hasNext()) {
       Role r = (Role)rs.next();
       buf.append(r);
       }
      
       Iterator gs = groups.iterator();
       while(rs.hasNext()) {
       Group g = (Group)rs.next();
       buf.append(g);
       }
      
      
       return buf.toString();
       }
      
      }
      



      javax.persistence.PersistenceException: org.hibernate.HibernateException: cannot simultaneously fetch multiple bags
       at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:737)
       at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121)
       at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
       at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
       at mo.reales.util.HibernateUtil.initFactory(HibernateUtil.java:40)
       at mo.reales.util.HibernateUtil.initFactory(HibernateUtil.java:35)
       at mo.reales.web.ServiceStartupListener.contextInitialized(ServiceStartupListener.java:69)
       at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3763)
       at org.apache.catalina.core.StandardContext.start(StandardContext.java:4211)
       at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
       at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
       at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
       at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:904)
       at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:867)
       at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
       at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122)
       at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310)
       at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
       at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)
       at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
       at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
       at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
       at org.apache.catalina.core.StandardService.start(StandardService.java:450)
       at org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
       at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
       at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
      Caused by: org.hibernate.HibernateException: cannot simultaneously fetch multiple bags
       at org.hibernate.loader.BasicLoader.postInstantiate(BasicLoader.java:66)
       at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:75)
       at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:43)
       at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:33)
       at org.hibernate.loader.entity.BatchingEntityLoader.createBatchingEntityLoader(BatchingEntityLoader.java:103)
       at org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:1748)
       at org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:1752)
       at org.hibernate.persister.entity.AbstractEntityPersister.createLoaders(AbstractEntityPersister.java:2982)
       at org.hibernate.persister.entity.AbstractEntityPersister.postInstantiate(AbstractEntityPersister.java:2975)
       at org.hibernate.persister.entity.SingleTableEntityPersister.postInstantiate(SingleTableEntityPersister.java:690)
       at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:290)
       at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
       at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)
       at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:730)
       ... 30 more