2016-10-15 12 views
1

Ну, я не понимаю, почему мой код не работает. Может кто-нибудь, пожалуйста, взгляните. Он не содержит сообщений об ошибках, но Клиент не будет удален. Другие методы хорошо работают (getCustomerbyId, getAllCustomers и так) БлагодаряJPA Удалить запрос не работает

public void deleteCustomerById(long id) { 
     EntityManager em = null; 
     try { 
      em = JpaUtil.getFactory().createEntityManager(); 
      em.getTransaction().begin(); 
      Query query = em.createQuery("Delete from Customer c where c.id = :id"); 
      query.setParameter("id", id); 
      em.getTransaction().commit(); 
     } finally { 
      JpaUtil.closeQuietly(em); 
     } 
    } 
+0

Какие СУБД вы используете? что синтаксис удаления не поддерживается во всех СУБД –

+0

Я использую HSQLDB. Благодарю. –

ответ

2

Вы должны выполнять запросы, чтобы иметь проблемы SQL в базе данных; в этом случае вы захотите использовать executeUpdate() и получить измененный счетчик строк, чтобы убедиться, что что-то было удалено или нет.

 em.getTransaction().begin(); 
     Query query = em.createQuery("Delete from Customer c where c.id = :id"); 
     query.setParameter("id", id); 
     int rows = query.executeUpdate(); 
     em.getTransaction().commit(); 
2

Вы создаете запрос, но не выполняете его. Вы должны добавить

query.executeUpdate(); 

перед совершением

0

Используйте JPA Apis найти (Customer.class), чтобы найти то объект клиента использовать Romove (объект)

+0

Это было бы уместно, если бы сущность имела дочерние сущности, которые также должны быть удалены, в противном случае подход с одним запросом OP лучше. – coladict