1. 错误: org.hibernate.QueryParameterException: could not locate named parameter[incidentTime]
错误的语句:
String sql = "UPDATE SLIIncident o SET o.isDeleted = :isDeleted WHERE o.rawEventId = :rawEventId AND o.sliId = :sliId";
Query query = em.createQuery(sql);
query.setParameter("incidentTime", incident.getIncidentTime());
query.setParameter("insertTime", incident.getInsertTime());
query.setParameter("preEventTime", incident.getPreEventTime());
query.setParameter("causeCode", incident.getCauseCode());
query.setParameter("isDeleted", incident.getIsDeleted());
query.setParameter("rawEventId", incident.getRawEventId());
query.setParameter("sliId", incident.getSliId());
query.executeUpdate();
原因:
query.setParameter set了不需要的字段,不知道往哪插了。
正确代码:
String sql = "UPDATE SLIIncident o SET o.isDeleted = :isDeleted WHERE o.rawEventId = :rawEventId AND o.sliId = :sliId";
Query query = em.createQuery(sql);
query.setParameter("isDeleted", incident.getIsDeleted());
query.setParameter("rawEventId", incident.getRawEventId());
query.setParameter("sliId", incident.getSliId());
query.executeUpdate();
2.
错误:
org.hibernate.hql.ast.ErrorCounter reportError- line 1:94: unexpected token: AND
java.lang.IllegalArgumentException: node to traverse cannot be null!
错误的语句:
//String sql = "UPDATE SLIIncident o SET o.isDeleted = :isDeleted WHERE o.rawEventId = :rawEventId AND o.sliId = :sliId";
String sql = "UPDATE SLIIncident o SET o.incidentTime = :incidentTime AND o.insertTime = :insertTime AND o.preEventTime = :preEventTime AND o.causeCode = :causeCode AND o.isDeleted = :isDeleted WHERE o.rawEventId = :rawEventId AND o.sliId = :sliId";
//String sql = "UPDATE SLIIncident o SET o.incidentTime = :incidentTime,o.insertTime = :insertTime, o.preEventTime = :preEventTime, o.causeCode = :causeCode, o.isDeleted = :isDeleted WHERE o.rawEventId = :rawEventId AND o.sliId = :sliId";
Query query = em.createQuery(sql);
query.setParameter("incidentTime", incident.getIncidentTime());
query.setParameter("insertTime", incident.getInsertTime());
query.setParameter("preEventTime", incident.getPreEventTime());
query.setParameter("causeCode", incident.getCauseCode());
query.setParameter("isDeleted", incident.getIsDeleted());
query.setParameter("rawEventId", incident.getRawEventId());
query.setParameter("sliId", incident.getSliId());
query.executeUpdate();
原因:
同时更新多个字段时不需要AND,而应该是逗号,
正确代码:
//String sql = "UPDATE SLIIncident o SET o.isDeleted = :isDeleted WHERE o.rawEventId = :rawEventId AND o.sliId = :sliId";
//String sql = "UPDATE SLIIncident o SET o.incidentTime = :incidentTime AND o.insertTime = :insertTime AND o.preEventTime = :preEventTime AND o.causeCode = :causeCode AND o.isDeleted = :isDeleted WHERE o.rawEventId = :rawEventId AND o.sliId = :sliId";
String sql = "UPDATE SLIIncident o SET o.incidentTime = :incidentTime,o.insertTime = :insertTime, o.preEventTime = :preEventTime, o.causeCode = :causeCode, o.isDeleted = :isDeleted WHERE o.rawEventId = :rawEventId AND o.sliId = :sliId";
Query query = em.createQuery(sql);
query.setParameter("incidentTime", incident.getIncidentTime());
query.setParameter("insertTime", incident.getInsertTime());
query.setParameter("preEventTime", incident.getPreEventTime());
query.setParameter("causeCode", incident.getCauseCode());
query.setParameter("isDeleted", incident.getIsDeleted());
query.setParameter("rawEventId", incident.getRawEventId());
query.setParameter("sliId", incident.getSliId());
query.executeUpdate();