Erro:
org.apache.jasper.JasperException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.jmedic.beans.Medico.especialidades, no session or session was closed
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Estou com o seguinte relacionamento ManyToMany(n-n)
// Classe Especialidade
@ManyToMany(mappedBy="especialidades")
public Collection<Medico> getMedicos() {
return medicos;
}
// Classe Medico
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name="ESP_MED",
joinColumns=@JoinColumn(name="id_medico"),
inverseJoinColumns=@JoinColumn(name="id_especialidade")
)
public Collection<Especialidade> getEspecialidades() {
return especialidades;
}
public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
Configuration conf = new AnnotationConfiguration();
conf.configure();
sessionFactory = conf.buildSessionFactory();
}
@SuppressWarnings("deprecation")
public static Session getSession() {
Session session = sessionFactory.openSession();
try {
session.connection().setAutoCommit(false);
} catch (Exception e) {
e.printStackTrace();
}
return session;
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Quando executo o método findById ocorre o erro citado acima, o método é o seguinte:
public Object findById(Class<?> clazz, int key){
Session session = null;
try {
session = getSession();
Object objeto = session.get(clazz, key);
return objeto;
} finally {
if (session != null) {
session.close();
}
}
}
protected Session getSession() {
return HibernateUtil.getSession();
}
Gostaria que alguem me ajudasse, já estou a 3 dias fazendo varias mudanças e não consigo obter um resultado satisfatório.
Se não fechar a conexão no método, da certo, porém tenho certeza que não é a solução.
Grato.