Melhor forma de trabalhar com transação no JPA?

Estou com essa dúvida, seria melhor usar AOP, Spring ou tentar outra forma de controlar e manter seguras as transações no JPA?

No meu projeto tento por o entitymanager em threadlocal, pega o corrente e então trabalha em cima dele. Pórém minha aplicação se utiliza de dois bancos (SQL Server e H2), sendo um para ambiente interno (servidor) e o segundo para externo (local).

Engraçado que mantenho os mesmos atributos das entidades, tudo igual, mesmo código para ambos os bancos, sendo que no SQL Server tudo ocorre bem, mas quando tento persitir uma entidade no local (H2) ele gera um loop infinito da persistência até que resulta um erro, pensei em tentar controlar melhor a transação, mas não sei qual seria a melhor forma. Estou aberto a opiniões. Obrigado.

Eu(!) usaria o controle transacional do Spring. (em outras palavras, aspectos :))