Sobes.tech
Junior — Middle

Podes listar e descrever os possíveis estados das entidades no JPA?

sobes.tech IA

Resposta da IA

No JPA (Java Persistence API), as entidades podem estar nos seguintes estados:

  1. Transiente — objeto criado na memória com a instrução new, mas não associado ao contexto de persistência e não guardado na base de dados. As alterações neste objeto não são rastreadas nem guardadas automaticamente.

  2. Gerido — objeto associado ao contexto de persistência (EntityManager). Todas as alterações neste objeto são rastreadas e, ao chamar flush() ou fazer commit da transação, são sincronizadas automaticamente com a base de dados.

  3. Desanexado — objeto que anteriormente era gerido, mas cujo contexto de persistência foi fechado ou o objeto foi desanexado. As alterações neste objeto não são rastreadas nem guardadas até que seja novamente anexado.

  4. Removido — objeto marcado para ser removido da base de dados. Ao fazer commit da transação, o objeto será removido da base.

Exemplo de transições:

EntityManager em = entityManagerFactory.createEntityManager();

// Transiente
MyEntity entity = new MyEntity();

em.getTransaction().begin();

// Gerido
em.persist(entity);

// Após persistir, o objeto torna-se gerido

// Removido
em.remove(entity);

em.getTransaction().commit();

// Após commit, o objeto torna-se desanexado
em.close();