Olá
Implementei um Banco de Dados no MySql e criei alguns triggers para atualizar o campo saldo (controle financeiro). Funciona.
Fiz uma Interface gráfica usando Swing (aplicação desktop). Funciona.
Dificuldade:
Quando faço uma operação (Insert, Update ou Delete) o trigger é acionado e funciona. Mas, mesmo lendo novamente a tabela, não consigo obter os dados atualizados (mostra o antigo). É como se ficasse no buffer e o JPA não “percebesse” que foi alterado pelo BD.
Tenho quase certeza que JPA só pode perceber alterações que foram feitas usando a API do JPA.
Para alterações que foram feitas numa trigger ou ferramenta admin aparecer para a aplicação JPA você vai ter que reiniciar a sessao.
JPA/Hibernate como o próprio nome diz, foi feito para hibernar os dados em uma session. Se quer os dados sempre atualizados nao use JPA/Hibernate. Do contrário, além do alto consumo de memória em usar essa ferramenta, terá que consumir mais ainda limpando o cache dos objetos ou “reiniciar” a sessao como @pfk66 explicou.
O flush é para forçar exatamente a sincronização oposta (JPA -> BD). Não percebi o que queres dizer com “instanciar novamente o objecto”.
Talvez fosse mais fácil mostrares essa parte do código.