Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

O commit, getTransaction e criação de fabrica são indispensáveis?

Antes de ver este curso, fiz um projetinho (um crud simples) usando hibernate e Postgres e chamando o método .persist ele já persistia no banco, sem necessitar do método .getEntityManager() Na realidade eu não usava nem o getTransaction.begin( ) E getTransaction.commit(), então fica minha duvida? o que realmente é indispensável e o que é boa prática?

Eu simplesmente criava um atributo : EntityManager entity e depois fazia entity.persist(NomeDaClases.class) , e funcionava.

Grato pela atenção.

3 respostas

Olá, Douglas.

Não sou perito na área, mas vou tentar ajudar. Se eu estiver errado, alguém me corrija, por favor.

Utilizando os métodos citados por você (getTransaction, begin e commit), você vai estar utilizando transações do banco de dados. Isso significa que todas as operações entre begin e commit serão executadas como se fossem 1 no banco. Ou todas são executadas com sucesso, ou nenhuma é. Isso pode gerar algum ganho em performance em alguns casos, e garante a consistência entre entidades relacionadas. Ou seja, se uma entidade tem uma relação de OneToMany com outra, por exemplo, e você vai persistir todas as entidades, estando dentro de uma transação vai garantir que todas as entidades deste relacionamento sejam inseridas.

Caso só deseje inserir uma entidade sem relacionamento nenhum, é completamente dispensável este procedimento.

solução!

Depende!! se você estiver utilizando um apllication server como o Wildfly ou o Glassfish, você não precisa se preocupar com esse gerenciamento de transações e nem como obter o entitymanager, pois o próprio servidor de aplicação cuida disso pra você, estes conceitos vão continuar existindo,mas é tudo transparente pra você.

Agora se você utilizar apenas um servlet container como o Tom Cat, você vai precisar se preocupar com as transações e pegar seu entitymanager de uma factory, ois servlets containers não implementam a JEE completa.

Pode reparar que no persistence.xml de uma aplicação rodando no Wildfly você configura ele como um datasource JTA (Java Transaction Api) enquanto de uma aplcação que roda no Tom Cat ela é do tipo RESOURCE_LOCAL

Obrigado Ricardo e Carlos, as explicações foram ótimas, consegui entender bem.

Abraços.