一年好景君须记,最是橙黄橘绿时。这篇文章主要讲述如何在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);
如果您有一个实体,您可以(并且应该)使用
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个实体。
推荐阅读
- 考虑在配置中定义类型为“com.gisapp.gisapp.dao.IUserDAO”的bean
- 带有@RequestParam和@RequestBody的Spring @GetMapping因HttpMessageNotReadableException而失败
- Xcode 8 App安装失败,出现未知错误
- Ad Hoc发布Xcode 10,App无法正常工作
- 是否有Eclipse的IntelliJ Keymapping插件()
- Android导出(如何创建.keystore文件())
- 在Ruby on Rails中集成Stripe和PayPal付款方式
- 函数式编程简介(JavaScript范例)
- 性能和效率(使用HTTP/3)