JPA - Commit

6 respostas
adriano.schmidt

Boa tarde,

Gostaria de compreender melhor as transações no JPA.

Eu não me preocupo em coisas como:

ctx.startSession();

ctx.getUserTransaction().begin();

Connection con = ctx.getConnection();

ctx.getUserTransaction().commit();

ctx.stopSession();

Mas existe alguma situação que eu preciso fazer um comit ou um flush? Se sim, como faço isso?

@Resource
private SessionContext ctx;

this.ctx.getUserTransaction().commit();

e o flush existe no JPA (não achei nada no auto-complete)? Qual a diferença entre commit e flush?

Gostaria de compreender melhor isso e também os atributos de transação:
@TransactionAttribute(TransactionAttributeType.REQUIRED)

Alguém pode dar uma explicada ou indicar um artigo bacana sobre isso?

Abraços!
Adriano Schmidt

6 Respostas

Hebert_Coelho

Caracas, acabei de estudar isso! =P

Commit vc marca as entidades para serem salvas, flush é quando o script sql é escrito e utilizado no DB.

As vezes vc precisa que uma entidade contenha o ID após o commit, aí vc força o flush!!

No JPA você pode fazer assim: entityManager.flush();

O Required você ou inicia uma transação nova caso não exista nenhuma ou entrão utiliza a transação existente.

Mano, eu estou lendo esse livro (Pro EJB 3: Java Persistence API ) e acabei por achá-lo grátis no google books. Ele fala sobre tudo isso mastigadinho!

http://books.google.com.br/books?id=fVCuB_Xq3pAC&pg=PA1&hl=pt-BR&source=gbs_toc_r&cad=4#v=onepage&q&f=false

A

cara,

vc usa commit e rollback qdo vc controla a transação na mao
e vc usa flush, qdo a transação é controlada pelo container e vc usa ele logo depois dos metodos, persist, merge e remove.

dica, deixe o container gerenciar a transação para vc, nao fique quebrando a cabeça com isso.

t+

Hebert_Coelho

alissonvla:
cara,

vc usa commit e rollback qdo vc controla a transação na mao
e vc usa flush, qdo a transação é controlada pelo container e vc usa ele logo depois dos metodos, persist, merge e remove.

dica, deixe o container gerenciar a transação para vc, nao fique quebrando a cabeça com isso.

t+


Até onde eu li no livro cara, flush pode se aplicar em qualquer situação, tanto como CMT ou BMT.

A

o flush num ambiente transacional e commit com a transação criada manualmente, eles fazem a mesma coisa.

t+

Hebert_Coelho

alissonvla:
o flush num ambiente transacional e commit com a transação criada manualmente, eles fazem a mesma coisa.

t+


Então oq o flush faz na manualmente?

A

o que estou querendo falar é isso

transação controlada pelo container

entityManager.persist(object);
entityManager.flush();

transação criada manualmente

entityManager.getTransaction().begin();
entityManager.persist(object);
entityManager.getTransaction().commit();

t+

Criado 23 de dezembro de 2011
Ultima resposta 24 de dez. de 2011
Respostas 6
Participantes 3