Hibernate3: Cannot simultaneously fetch multiple bags
ericmacau May 13, 2007 11:00 PMHello,
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