如何在Spring Boot Application中使用JPA删除/ getList

一年好景君须记,最是橙黄橘绿时。这篇文章主要讲述如何在Spring Boot Application中使用JPA删除/ getList相关的知识,希望能为你提供帮助。
我有一个实体:

@Entity @Table(name ="cats") public class Cat { @Id @Column(name="name") private String name; @Column(name="age") private int age; @Column(name="color") private String color; @Column(name="weight") private int weigth; .. }

1.我需要使用EntityManager从数据库中删除它:
@Override public void delete(Cat cat) { entityManager.remove(cat); }

问题:我有一个包含所有这些元素的Map< String, Cat> 。我从地图IllegalArgumentException- > “删除分离的实例com.entities.Cat#cats”中获取名称。
问题:如果不通过密钥从数据库获取,我该怎么办?
【如何在Spring Boot Application中使用JPA删除/ getList】2.我需要带有限制和偏移量的getList。
要获得我可以使用的所有元素: entityManager.createNativeQuery("SELECT name, age, color, weight FROM cats");
没有entityManager我使用prepatedStatement:
"SELECT name, age, color, weight FROM cats LIMIT ?,?"

题: 我怎样才能使用entityManager? entityManager有类似prepareStatement的东西吗?
答案使用EntityManager,您可以使用Query对象。它为您提供了几种不同的方法来构建查询,您可以在Docs中看到。
从那里,您可以使用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);

如果您有一个实体,您可以(并且应该)使用EntityManagerremove()删除它。你得到了这个错误,因为你的实体是分离的 - 也就是说,你的EntityManager并不知道它的存在。
要将实体“附加”到您的经理,您可以使用merge()。但是,如果数据库中不存在所述实体,则将插入该实体,如果该实体存在但与您的对象具有不同的字段,则将更新该实体。
public void delete(Cat cat) { if(!entityManager.contains(cat)) { entityManager.merge(cat); }entityManager.remove(cat); }

要第一次插入实体,您还可以使用persist()。有关merge()persist()之间的差异,请参阅this。
另一答案
  1. 如果你需要使用EntityManager,那么只需使用参考: entityManager.remove(entityManager.getReference(Cat.class, id)); 这样,实体将不会从db中获取,但会被删除。 使用查询也是一个选项: Query query = entityManager.createQuery("delete from Entity e where e = :entity"); query = query.setParameter("entity", entity); query.executeUpdate();
  2. 你可以使用Query创建EntityManager#createQuery。然后设置参数:firstResultmaxResultsquery.setFirstResult(10).setMaxResults(20); 这将从10日开始需要20个实体。

    推荐阅读