【发布时间】:2018-09-23 00:41:39
【问题描述】:
在我的项目中,我需要更新数据库 (MySQL) 中的实体。所以我的代码看起来像:
道:
public void updatepracownik (Pracownik pracus) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("baza");
EntityManager em = emf.createEntityManager();
EntityTransaction et = em.getTransaction();
et.begin();
Pracownik pp= (Pracownik)em.find(Pracownik.class ,1);
Query querys = em.createNativeQuery("UPDATE pracownik p SET p.idpracownik=?, p.imie=?, p.nazwisko=?, p.stanowisko=?, p.iloscGodzin=? WHERE p.idpracownik=idpracownik");
querys.setParameter(1, pracus.getIdpracownik());
querys.setParameter(2, pracus.getImie());
querys.setParameter(3, pracus.getNazwisko());
querys.setParameter(4, pracus.getStanowisko());
querys.setParameter(5, pracus.getiloscGodzin());
querys.executeUpdate();
em.persist(pracus);
et.commit();
}
我的控制器是:
@Override
@Transactional
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int idpracownik= Integer.valueOf(req.getParameter("idpracownik"));
String imie = req.getParameter("imie");
String nazwisko = req.getParameter("nazwisko");
String stanowisko = req.getParameter("stanowisko");
double iloscGodzin = Double.valueOf(req.getParameter("iloscGodzin"));
System.out.println(idpracownik);
Pracownik pracus= new Pracownik (idpracownik, imie, nazwisko, stanowisko, iloscGodzin);
Dao dao = new Dao();
dao.updatepracownik(pracus);
req.getRequestDispatcher("html/blank.jsp").forward(req,resp);
最后,当我想更新时,我从 MySQL 收到错误消息:
Internal Exception: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '142' for key 'PRIMARY'
Error Code: 1062
Call: UPDATE pracownik p SET p.idpracownik=?, p.imie=?, p.nazwisko=?, p.stanowisko=?, p.iloscGodzin=? WHERE p.idpracownik=idpracownik
bind => [5 parameters bound]
Query: DataModifyQuery(sql="UPDATE pracownik p SET p.idpracownik=?, p.imie=?, p.nazwisko=?, p.stanowisko=?, p.iloscGodzin=? WHERE p.idpracownik=idpracownik")
org.eclipse.persistence.internal.jpa.QueryImpl.executeUpdate(QueryImpl.java:308)
我必须添加 - 在我的数据库表中,“idpracownik”设置为 AI 和主键。我知道我无法“更新”PK,但是当我删除代码时(在字 SET 之后):
p.idpracownik=?
从
UPDATE pracownik p SET p.idpracownik=?
我得到具有重复字段但具有新(递增)idpracownik 的新实体..... 我陷入了困境。
【问题讨论】: