Peço ajuda dos senhores em uma situação que já pesquisei bastante e não encontrei a solução.
Utilizo em algumas listas, view do mysql (um select com várias tabelas) criada como entidade, a consulta funciona perfeitamente, porém quando faço um update na tabela principal, e chama a pagina com a lista, ela não traz as alterações feitas, o interessante é que o insert ou delete atualiza normalmente.
Teria algum comando que eu possa colocar e ele atualiza essa view.
estranho… perguntei isso pq imaginei que no update vc poderia está dando roolback em algum momento.
tu deve está fazendo alguma coisa de diferente na hora de dar update.
@Entity
@Table(name="contaspagasepagar")
public class ContasPagasePagar implements Serializable{
@Id
private Long idconta;
private Long compraconta;
private Long vendaconta;
private String vencconta;
private String datapagtoconta;
private String descricaoconta;
private String categoriaconta;
private String fornecedorconta;
private String veiculoplacaconta;
private String valorconta;
public Long getIdconta() {
return idconta;
}
public void setIdconta(Long idconta) {
this.idconta = idconta;
}
e o restante dos Getters e setters
}
Minha classe dao generica:
public class DaoGenerico <PK, T> {
EntityManager em = JPAUtil.getEntityManager();
protected void init() {
// Inciando a transação
JPAUtil.init();
}
protected void commit() {
// Finalizando a transação
JPAUtil.commit();
}
protected void rollback() {
// estornando a transação
JPAUtil.rollback();
}
public void salvar(T modelo){
this.init();
em.persist(modelo);
this.commit();
}
public void deletar(T modelo, long id){
this.init();
T encontrado = (T) em.find(modelo.getClass(), id);
em.remove(encontrado);
this.commit();
}
public void atualizar(T modelo) {
this.init();
em.merge(modelo);
this.commit();
}
public List<T> buscaTodos() {
String jpql = "from " + getTypeClass().getName();
Query qry = em.createQuery(jpql);
return qry.getResultList();
}
public T buscaPorId(T modelo, Long id){
return (T) em.find(modelo.getClass(), id);
}
private Class<?> getTypeClass() {
Class<?> clazz = (Class<?>) ((ParameterizedType) this.getClass()
.getGenericSuperclass()).getActualTypeArguments()[1];
return clazz;
}
}
Trecho da minha classe Dao que grava o contas a pagar:
public class ContasapagarDao extends DaoGenerico<Long, Contasapagar>{
@Override
public void salvar(Contasapagar contasapagar) {
if (contasapagar.getId() == -1)
super.salvar(contasapagar);
else
super.atualizar(contasapagar);
}
trecho do metodo na minha classe controller:
@RequestMapping("/listacontaspagasepagar")
public ModelAndView lista(){
List<ContasPagasePagar> contaspagasepagar = new ContasapagarDao().listaContasPagasePagar();
ModelAndView mv = new ModelAndView("listacontasapagar"); //mesmo nome da minha jsp
mv.addObject("contaspagasepagar",contaspagasepagar);
return mv;
}
Se precisar de mais algum trecho do codigo me avise por favor.
Caros colegas consegui resolver fazendo um refresh da entidade, carrego um objeto da entidade view correspondente a entidade principal que foi alterado o registro, segue exemplo:
Long codigo = contas.getId();
ContasPagasePagar contaspagasepagar_ = new ContasPagasePagar();
contaspagasepagar_ = new ContasPagasePagarDao().buscaPorId(contaspagasepagar_, codigo);
new ContasPagasePagarDao().refresh(contaspagasepagar_);
Esperdo ajudar outros que estejam com a mesma duvida.