daew pessoal, estou iniciando com o Hibernate.
Estou fazendo um sistema que possui uma classe chamada “Gerencia” que gerencia o Hibernate
public class Gerencia {
private static Session se;
//~--- constructors -------------------------------------------------------
/** Creates a new instance of Gerencia */
public Gerencia() {}
//~--- methods ------------------------------------------------------------
/**
* Altera o Objeto
* @param obj objeto a ser alterado no banco
*/
public static void altera(Object obj) throws HibernateException {
se = Sessao.getSession();
Transaction tr = se.beginTransaction();
se.update(obj);
se.flush();
tr.commit();
se.close();
}
/**
* Exclui o Objeto
* @param obj objeto a ser excluido no banco
*/
public static void exclui(Object obj) throws HibernateException {
se = Sessao.getSession();
Transaction tr = se.beginTransaction();
se.delete(obj);
se.flush();
tr.commit();
se.close();
}
/**
* Inclui o Objeto
* @param obj objeto a ser salvo no banco
*/
public static void inclui(Object obj) throws HibernateException {
se = Sessao.getSession();
Transaction tr = se.beginTransaction();
try{
se.save(obj);
se.flush();
tr.commit();
se.close();
}catch(HibernateException e){
e.printStackTrace();
}
}
/**
*carrega uma classe q tenha chave primária única
*/
public static Object carrega(Class cla,Integer pk){
Object obj;
try{
se = Sessao.getSession();
se.clear();
//se.close();
Transaction tr = se.beginTransaction();
obj = se.load(cla,pk);
se.flush();
tr.commit();
} catch(HibernateException e){
obj = null;
e.printStackTrace();
}
return obj;
}
/**
* Inclui ou salva o Objeto
* @param obj objeto a ser salvo no banco
*/
public static void incluiOuAltera(Object obj) throws HibernateException {
se = Sessao.getSession();
Transaction tr = se.beginTransaction();
try{
se.saveOrUpdate(obj);
se.flush();
tr.commit();
se.close();
}catch(HibernateException e){
e.printStackTrace();
}
}
/**
* Pega o objeto do banco conforme a classe e os parametros passados.
* @param key codigo do objeto
* @param nome Classe do Objeto
* @param chave chave primária do objeto no banco.
* @return Object (fazer Cast para o q precisar)
*/
public static Object selecionaPorCodigo(int key, String nome,
String chave) {
se = Sessao.getSession();
Transaction tr = se.beginTransaction();
Object obj = null;
Query query = se.createQuery("select obj from " + nome
+ " as obj where obj." + chave + " = "
+ key);
Iterator it = query.iterate();
while (it.hasNext()) {
obj = (Object) it.next();
}
se.flush();
tr.commit();
//se.close();
return obj;
}
public static Object selecionaChaveComposta(Class classe,Serializable ser) {
return Sessao.getSession().get(classe,ser);
}
/**
* Pega o objeto do banco conforme o sql passado.
* @param sql ex: select obj from "+ nome +" as obj where obj."+ chave +" = "+key
* @return Object (fazer Cast para o q precisar)
*/
public static Object selecionaSql(String sql) {
try {
se = Sessao.getSession();
Transaction tr = se.beginTransaction();
Object obj = null;
Query query = se.createQuery(sql);
Iterator it = query.iterate();
while (it.hasNext()) {
obj = (Object) it.next();
}
se.flush();
tr.commit();
se.close();
return obj;
} catch (Exception e) {
return null;
}
}
/**
* Pega todos os objetos do banco conforme a classe passada.
* @param nome Classe dos objetos
* @return Iterator
*/
public static Iterator selecionaTodos(String nome) {
se = Sessao.getSession();
Transaction tr = se.beginTransaction();
Query query = se.createQuery("from " + nome + " obj");
Iterator it = query.iterate();
se.flush();
tr.commit();
se.close();
return it;
}
public static List retornaLista(String hql) {
try {
se = Sessao.getSession();
Transaction tr = se.beginTransaction();
Query query = se.createQuery(hql);
List list = query.list();
se.flush();
tr.commit();
se.close();
return list;
} catch (HibernateException e) {
e.printStackTrace();
return null;
}
}
//~--- get methods --------------------------------------------------------
/**
* retorna a sessão
* @param
*/
public static Session getSessao() throws HibernateException {
se = Sessao.getSession();
return se;
}
}
o problema que acontece, é que quando vou usar collections aparece o seguinte erro:
org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
alguém sabe exatamente o que quer dizer?