如何在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);
如果您有一个实体,您可以(并且应该)使用EntityManager
和remove()
删除它。你得到了这个错误,因为你的实体是分离的 - 也就是说,你的EntityManager
并不知道它的存在。
要将实体“附加”到您的经理,您可以使用merge()
。但是,如果数据库中不存在所述实体,则将插入该实体,如果该实体存在但与您的对象具有不同的字段,则将更新该实体。
public void delete(Cat cat) {
if(!entityManager.contains(cat)) {
entityManager.merge(cat);
}
entityManager.remove(cat);
}
要第一次插入实体,您还可以使用persist()
。有关merge()
和persist()
之间的差异,请参阅this。
- 如果你需要使用
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();
- 你可以使用
Query
创建EntityManager#createQuery
。然后设置参数:firstResult
和maxResults
:query.setFirstResult(10).setMaxResults(20);
这将从10日开始需要20个实体。
以上是关于如何在Spring Boot Application中使用JPA删除/ getList的主要内容,如果未能解决你的问题,请参考以下文章
不能在 Spring Boot 2(版本 2.0.0.M7)中包含 Prometheus 指标
如何使用 Spring Boot Web 客户端为内容类型 application/x-www-form-urlencoded 的表单数据发布请求