Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save thiagosperandio/851b89abf3029f4de18f7ccb6098c07f to your computer and use it in GitHub Desktop.
Save thiagosperandio/851b89abf3029f4de18f7ccb6098c07f to your computer and use it in GitHub Desktop.

DB Comum

Transação:

Begin transaction
	...update/delete/insert table...
Rollback se erro
Commit se OK em tudo

JPA

Ele mantém todos os comandos de DB em sua memória, ao invés de enviar pro DB. No final do processo, toda a pilha de comandos são enviadas pro DB. Quando a gente executa o comando DAO.flush(), os scripts que já foram processados no JPA são enviados para o banco e as instâncias tem a memória liberada. Se der um DAO.clear(), as entidades mapeadas JPA perdem suas alterações (lembrando que JPA trabalha com mapeamento de entidades). Native queries não podem ser controladas pelo JPA, por isso normalmente já são enviadas para o DB.

Transação sem flush() - funcionamento normal:

Begin transaction
	Guarda tudo na RAM do servidor, nas instâncias internas de objetos de controle do JPA
	Finaliza o método/fluxo da Business, conforme a anotação de transação (BEAN, CONTAINER, NEW_TRANSACTION..)
	Após terminar o fluxo de código, ele manda tudo para o DB
		...update/delete/insert table...
Rollback se erro em tudo
Commit se OK em tudo

Transação com flush():

Quando se pretende liberar recursos do server, mas tome cuidados (https://www.developerfusion.com/article/84945/flush-and-clear-or-mapping-antipatterns/)

Begin transaction
	Executa o código e cada que vez que dá flush(), os comandos são enviados pro DB, mas ainda dentro da transação, i.e., sem dar commit.
		...update/delete/insert table...
	Finaliza o método/fluxo da Business, conforme a anotação de transação (BEAN, CONTAINER, NEW_TRANSACTION..)
	Após terminar o fluxo de código, ele manda tudo que ainda não tiver enviado para o DB
Rollback se erro em tudo
Commit se OK em tudo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment