Bom dia pessoas,
Estou com um probleminha, minha aplicação JPA dava um erro de javax.servlet.ServletException: failed to lazily initialize a collection of role: org.it4services.contactprovider.to.Campanha.tabulacaoList, no session or session was closed ao obter uma lista de uma classe com a relação OneToMany, aí eu anotei ela com a opção EAGER para obter tudo na tentativa de sanar este problema. Mas quando faço isso dá um problema ao subir a aplicação no JBoss, e a causa raiz do problema é a que segue abaixo:
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.(EntityLoader.java:75)
at org.hibernate.loader.entity.EntityLoader.(EntityLoader.java:43)
at org.hibernate.loader.entity.EntityLoader.(EntityLoader.java:33)
at org.hibernate.loader.entity.BatchingEntityLoader.createBatchingEntityLoader(BatchingEntityLoader.java:103)
at org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:174
at org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:1752)
at org.hibernate.persister.entity.AbstractEntityPersister.createLoaders(AbstractEntityPersister.java:2984)
at org.hibernate.persister.entity.AbstractEntityPersister.postInstantiate(AbstractEntityPersister.java:2977)
at org.hibernate.persister.entity.SingleTableEntityPersister.postInstantiate(SingleTableEntityPersister.java:690)
at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:290)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:91
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:66
… 52 more
A classe da onde estou tentando obter a lista, e que nem subiu a aplicação quando coloquei o EAGER, está anotada da seguinte forma:
@Entity
public class Campanha implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Integer id;
private String nome;
@OneToMany(mappedBy = "campanha", cascade = ALL, fetch=EAGER)
private List<Tabulacao> tabulacaoList = new ArrayList<Tabulacao>();
@ManyToMany(fetch=EAGER)
@JoinTable(inverseJoinColumns = @JoinColumn(name="id_usuario", referencedColumnName = "id"), joinColumns = @JoinColumn(name="id_campanha", referencedColumnName = "id"))
private List<Usuario> usuarioList = new ArrayList<Usuario>();
private Boolean ativo;
A classe à qual a anterior se relaciona está da seguinte forma:
@Entity
public class Tabulacao implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Integer id;
@ManyToOne
@JoinColumn(name="id_campanha", referencedColumnName = "id")
private Campanha campanha = new Campanha();
Mandem uma luz por favor. Valeu!!!