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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在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”中获取名称。

问题:如果不通过密钥从数据库获取,我该怎么办?

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个实体。

以上是关于如何在Spring Boot Application中使用JPA删除/ getList的主要内容,如果未能解决你的问题,请参考以下文章

使用spring boot创建分层属性文件

在内存数据库中使用 Spring Boot 测试

不能在 Spring Boot 2(版本 2.0.0.M7)中包含 Prometheus 指标

停止许多特定的 Spring Boot 应用程序

如何使用 Spring Boot Web 客户端为内容类型 application/x-www-form-urlencoded 的表单数据发布请求

在eclipse中将Spring Boot应用程序导出为JAR文件