Estou desenvolvendo uma aplicação JSP com Struts 2, hibernate e banco mysql. A ferramenta que utilizo é o eclipse. Ocorre que quando vou fazer o update em um registro dá erro de duplicidade, pois o metodo que estou usando está fazendo insert ao invés de update. Quando é exibida a lista de métodos no eclipse não aparece o método update. Gostaria de saber se alguém conhece e pode me ajudar. Segue abaixo a minha classe DAO. O método é o último (Alterar).
package dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.Persistence;
import model.Defeito;
public class DefeitoDAO
{
EntityManagerFactory emf = Persistence
.createEntityManagerFactory(“qts_persistence_unit”);
EntityManager em = emf.createEntityManager();
@SuppressWarnings("unchecked")
public List<Defeito> listDefeitos()
{
List<Defeito> defeitos;
try{
defeitos= em.createQuery(
"select defeito from Defeito defeito")
.getResultList();
}
catch (NoResultException e)
{
defeitos = null;
}
return defeitos;
}
public String findByDefeito(String defeito){
String def;
try{
def=(String) em.createQuery(
"select defeito from Defeito def1 where def1.defeito=?1")
.setParameter(1, defeito)
.getSingleResult();
}catch (NoResultException e) {
def = null;
}
if(def==null){
def="este defeito nao existe";
}
return def;
}
public Defeito findById(Long id){
Defeito defeito;
try{
defeito=(Defeito) em.createQuery(
"select defeito from Defeito defeito where defeito.cod_defeito=?1")
.setParameter(1, id)
.getSingleResult();
}catch (NoResultException e) {
defeito = null;
}
return defeito;
}
public Boolean inserirDefeito(Defeito defeito) {
em.getTransaction().begin();
em.persist(defeito);
em.getTransaction().commit();
return true;
}
public Boolean excluirDefeito(Long id){
em.getTransaction().begin();
em.remove(findById(id));
em.getTransaction().commit();
return true;
}
public Boolean alterarDefeito(Long id,Defeito defeito){
em.getTransaction().begin();
Defeito defeito_old = findById(id);
defeito_old = defeito;
em.merge(defeito_old);
em.getTransaction().commit();
return true;
}
}