Dúvida conceitual - Como usar esse tipo de transação

2 respostas
A

Ola PessoALL,

Estou trabalhando com o Hibernate em um projeto web (utilizando tb o Struts). Tenho um DAO chamado SystemDAO que possue vários métodos genéricos para salvar, excluir, atualizar, carregar e etc. Um exemplo seria o método save

public void save(Object object) {
  Session session = sessionFactory.openSession();
  Transaction tx = session.beginTransaction();
  session.save(object);
  session.flush();
  tx.commit();
  session.close();
}

Eu posso passar qualquer objeto mapeado pelo SessionFactory que ele irá salvar o objeto, isso está ocorrendo legal, mas note que a transação é aberta e fechada dentro do método.

Chegamos agora a uma parte do sistema (um controle de vendas) onde eu irei precisar atualizar 3 objetos, mas se ocorrer erro em algum, tem que dar rollback em todos.
A dúvida é? eu criaria um DAO específico para essa parte e criaria um método estilo:

public void updateALL(Object objeto1,Object objeto2,Object objeto3) {
  Session session = sessionFactory.openSession();
  Transaction tx = session.beginTransaction();
  session.save(object1);
  session.save(object2);
  session.save(object3);
  session.flush();
  tx.commit();
  session.close();
}

Isso está certo?
Ou você aconselham algum outro tipo de abordagem melhor? Poderiamos exemplificar fazendo favor?

Obrigado

2 Respostas

passos

alex.lopes:

public void updateALL(Object objeto1,Object objeto2,Object objeto3) {

Isso está certo?

Acho que não… quando vc precisar passar 4 objetos? Vai criar mais um metodos com 4 parametros? e 5? e 6? e 1000? :stuck_out_tongue:

Não sei se e a melhor da soluções mas acho que resolve o problema se vc passar uma coleção.

public void save(Collection bla) {

	Session session = sessionFactory.openSession();
	Transaction tx = session.beginTransaction();
		
	for (Iterator iter = bla.iterator(); iter.hasNext();) {
		session.save(iter.next());	
	}

	session.flush();
	tx.commit();
	session.close();

}
rodrigo_corinthians

A solução do passos funciona pra esse seu problema, mas na minha opinião o controle de transação tem que estar na última camada(no action do Struts) do sistema, assim vc controlaria várias regras de negócios e não apenas dados.

Sem mais, Rodrigo.

Criado 28 de julho de 2005
Ultima resposta 28 de jul. de 2005
Respostas 2
Participantes 3