JPA Buscas de parametros diferentes e com Join que retornam o mesmo Objeto

Utilizando a Criteria Query para realizar 2 buscas com Join e apesar de informar parâmetros diferentes nas 2 buscas, eu sempre recebia como retorno em ambas o primeiro objeto buscado. Deixando claro aqui algumas particularidades:

  • Por sorte(ou não), o Objeto buscado era o mesmo alguns valores de sua composição mudavam.
  • Esses atributos que tinham valores diferentes, não eram utilizados no Equals e HashCode do Objeto buscado.
  • A transação do Provider ainda estava aberta quando foi feita a segunda busca.
  • Ambas buscas feitas pelo mesmo metodo, porem com parâmetros diferentes
Tendo isso em mente, temos o seguinte cenário a busca é realizada com sucesso, e o provider faz uso do Equals e HashCode para verificar se esse objeto já existe no contexto de persistência, caso já exista o provider somente retorna o valor que se encontra já gravado no contexto.
No meu caso ambos Objeto retornados eram iguais perante ao Equals e HashCode, por isso era sempre retornado o valor já presente no contexto.

Minha solução pra esse problema, foi remover o objeto do contexto de persistência antes de retorna-lo.
Basta utilizar o código abaixo:

entityManager.detach(obj);//EntityManager da JPA
ou Adicionar a seguinte anotação no metodo. Pois quando se faz uso do controle de transação JTA, o contexto de persistencia está ligado diretamente a existência da transação, ao solicitar uma nova transação para a execução do metodo, um novo contexto é criado.
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

Segue a documentação:
http://docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/architecture.html#architecture-ejb-persistctxscope

Porém deixo aqui uma duvida a ser testada, não sei qual dos dois metodos é mais impactante,pois ao desatachar do contexto, é cessada a existência desse objeto em um contexto de persistência. E quanto ao segundo método, todo execução do método irá solicitar um nova transação e irá mantar o objeto no contexto de persistência.

Siceramente não sei qual deles tem maior impacto, porem digo que cada uso tem sua utilidade, depende somente da necessidade.

Comments

Popular posts from this blog

Tela preta no Backtrack 5 ao executar o startx

Maven Error assembling EJB: META-INF/ejb-jar.xml is required for ejbVersion 2.x

Static Metamodel