我正在尝试删除带有ID的行,该行显示在文本字段上,我收到错误:“无法提取ResultSet”。我试图以两种方式做到这一点,但它们都没有工作......我怎么能正确地做到这一点?
第一种方式:
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("clinic");
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
Patient patient = new Patient();
patient.setPID(infoPIDField.getText());
Query query = entityManager.createQuery("FROM Patient WHERE idpatient = :idpatient", Patient.class);
query.setParameter("idpatient", patient.getPID());
patient = (Patient) query.getResultList().get(1);
entityManager.remove(patient);
entityManager.getTransaction().commit();
entityManager.close();
entityManagerFactory.close();
第二种方式(错误:无法输入更新/删除查询):
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("clinic");
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
Patient patient = new Patient();
patient.setPID(infoPIDField.getText());
Query query = entityManager.createQuery("DELETE Patient WHERE idpatient = :idpatient", Patient.class);
query.setParameter("idpatient", patient.getPID());
int result = query.executeUpdate();
entityManager.getTransaction().commit();
entityManager.close();
entityManagerFactory.close();
病人:
@Entity
@Table(name = "patient")
public class Patient {
@Id
public String PID;
public String getPID() {
return PID;
}
public void setPID(String pID) {
PID = pID;
答案 0 :(得分:0)
这个
patient = (Patient) query.getResultList().get(1);
应该是
patient = (Patient) query.getResultList().get(0);
假设根据id查找只返回一行。
更好地检查返回的行数,可能为零。
答案 1 :(得分:0)
第一种方式应该是
patient = (Patient) query.getResultList.get(0);
第二种方式应该是:
Query query = entityManager.createQuery("DELETE Patient as p WHERE p.idpatient = :idpatient");
因为您正在使用HQL并且它作为Java对象工作,所以您必须在Patient对象中引用属性idpatient。
我希望这些信息可以帮到你。
祝你好运。答案 2 :(得分:0)
如果您只是按ID删除实体,我不认为在您不必要地选择实体时,第一种方式是可行的。
第二种方式不太便携。 Iirc,HQL / JPQL中的批量删除/更新仅在更高版本的JPA / Hibernate中可用,并且这种批量删除/更新可能会触发第一级缓存的刷新和失效/刷新(如果它是真的,则不能很清楚地记得但是第一级缓存点:P)
还有其他方法可以通过ID进行删除,副作用较小:
(代码可能有误,只是为了展示想法)
Long id = whateverWayYouGetTheId();
Patient patientToBeDeleted = entityManager.getReference(Patient.class, id);
entityManager.remove(patientToBeDeleted);