С EntityManager
вы можете использовать Query
объекты.Он предоставляет вам несколько различных методов для создания ваших запросов, которые вы можете увидеть в Документах .
Оттуда вы можете использовать Query
для выбора или выполнения обновления.в базу данных.
Обновить пример:
//:id is a parameter you can set
Query query = entityManager.createQuery("delete from Entity e where e.id = :id");
query = query.setParameter("id", id);
query.executeUpdate();
Выбрать пример (используя TypedQuery
, который реализует Query
:
String sql = "select e from Entity e";
TypedQuery<Entity> query = entityManager.createQuery(sql, Entity.class);
System.out.println(query.getResultList());
Вы можете определить предел и смещениекак это:
query = query.setFirstResult(offset);
query = query.setMaxResults(limit);
Если у вас есть сущность под рукой, вы можете (и должны) удалить ее, используя EntityManager
с remove()
. Вы получаете эту ошибку, потому чтоваша сущность отсоединена, то есть ваша EntityManager
не знает о ее существовании.
Чтобы "прикрепить" сущности к своему менеджеру, вы можете использовать merge()
. Однако, если указанная сущность не существуетв базу данных он будет вставлен, и если он существует, но имеет поля, отличные от вашего объекта, он будет обновлен.
public void delete(Cat cat) {
if(!entityManager.contains(cat)) {
entityManager.merge(cat);
}
entityManager.remove(cat);
}
Для вставки объектов в первый раз вы также можете использовать persist()
.различия между merge()
и persist()
, см. this .