Pergunta

Atualmente estou desenvolvendo uma aplicação em java usando Hibernate como um gerenciador de persistência e JPA como uma abstração das persistência gerenciar hibernação.

Eu gostaria de saber o impacto de envolver uma consulta resultado em torno de uma transação. Eu sei que o gerenciador de entidade deve permanecer aberto para bug campo preguiçosamente buscado o que sobre a transação em tudo isso?

Aqui está um exemplo de código com a ativação de transações capacidade / desativação.

public List<Exportdata> get(Integer max, EntityManager em, Boolean withTransaction) {
    EntityTransaction tx = null;
    try {
        if (withTransaction) {
            tx = em.getTransaction();
            tx.begin();
        }

        Query query = em.createQuery("from Exportdata");
        query.setMaxResults(10);
        List<Exportdata> list = query.getResultList();

        if (withTransaction)
            tx.commit();

        return list;
    } catch (RuntimeException re) {
        if (withTransaction)
            if (tx != null && tx.isActive())
                tx.rollback();

        throw re;
    }
}

Qual é a diferença entre ativar ou desativar withTransaction quando esta função é chamado?

Obrigado a todos, Fred

Foi útil?

Solução

Não há nenhuma diferença prática aqui, já que não há qualquer mudança de dados. A consulta que você executar irá gerar um SQL selecionar. Transações estão lá para que você possa aplicar propriedades ACID de uma colecção de inserções, atualizações, etc.

No entanto , se você começar a manipular os objetos na lista de voltar de este método, chamando setters, etc. essas mudanças serão propagadas de volta para o banco de dados fora com uma transação em um ad-hoc base. Em outras palavras, você vai efetivamente estar trabalhando com o db em modo auto-commit. Esta é pouco provável que seja o que você quer.

A coisa importante a entender é que a duração de um contexto de persistência e uma transação podem ser gerenciados separadamente. Muitas vezes, porém você gostaria de geri-los juntos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top