Я пытаюсь удалить строку с идентификатором, который отображается в текстовом поле, и я получил ошибку: «не удалось извлечь ResultSet». Я попытался сделать это двумя способами, но никто из них не работает ... как я могу сделать это правильно?Hibernate - удалить строку на основе введенного ID ... как?
первый способ:
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;
В ваших запросах вы ссылаетесь на idpatient, а ваша @Id роль пациента - PID: поэтому в запросах вы ссылаетесь на несуществующее свойство. Другое имя PID проблемы несовместимо с поведением по умолчанию Hibernate - внутри запроса, который на самом деле чувствителен к регистру PID. (и это также может быть источником проблем) –
И не забудьте очистить() ваши изменения до завершения транзакции, может быть, ваша среда не будет автоматически очищаться. –
что-то не в тему: вы уверены, что хотите управлять транзакцией вручную? Обычно это не очень хорошая идея, особенно если ваше приложение становится более сложным –