Estou com o seguinte problema:
Tenho dois bancos de dados:
[i]- SQL Server
- Derby[/i]
A aplicação se conecta com ambos.
E tenho duas classes entidades:
[i]- Auditoria
- Procedimento[/i]
A relação dessas classes é de 1-N. Ou seja: uma Auditoria poderá ter vários Procedimentos.
Eu abro a transação via EntityManager com o banco SQL Server e gravo várias auditorias com vários procedimentos, até aí tudo certo, persiste no banco com sucesso, o problema é quando abro duas transações (a primeira para ler as auditorias do SQL Server, a segunda para gravar as auditorias do SQL Server para o Derby) onde que na hora de persistir ele apenas persiste a auditoria, e os procedimentos relacionados com a auditoria não são gravados, não entendo por quê isso ocorre.
O método buildEntityList é o método que lê do as auditorias do banco remoto (SQL Server) e passa tudo para uma lista.
public List buildEntityList(Class pEntity) {
List lModel = null;
Query lQuery = emRemote.createQuery("SELECT m FROM " + pEntity.getSimpleName() + " m");
lModel = lQuery.getResultList();
return lModel;
}
O método download lê o conteúdo da lista e persite o conteúdo no banco local (Derby).
public void download(List<ModelVersioning> pContent, Class pEntity) throws Exception {
//verifica se não está nula e se não está vazia.
if (pContent != null && !pContent.isEmpty()) {
//varre toda a lista verificando se existe a mesma entidade no banco
//local, caso exista ele será apagado e uma versão do banco remoto
//será colocado em lugar.
for (ModelVersioning lModel : pContent) {
ModelVersioning model = (ModelVersioning) emLocal.find(pEntity, lModel.getId());
//if (lQuery != null && !lQuery.getResultList().isEmpty()) {
if (model != null && model.getId() != null) {
//há registro, então apaga o objeto no banco local.
System.out.println("$ Auditoria achada, removendo...");
emLocal.remove(emLocal.getReference(pEntity, lModel.getId()));
}
emLocal.merge(lModel);
}
emLocal.getTransaction().commit();
}
}
Há portanto dois EM. emRemote e emLocal
E ambas as classes de entidades herdam de ModelVersioning que é uma classe genérica para models do tipo.
Acredito que dessa forma era para persitir com sucesso no banco de dados local.