Java EE,如何正确实现更新?

标签 java jakarta-ee jpa

我开始着手我的第一个 Java EE 项目。 现在我阅读了一些文档并对更新的性能或风格有疑问。什么更好:

@Override
public void updateBook(BookTO to) {
    BookEJB book = new BookEJB(to.getISBN());
    book.setFinishedReading(to.getFinishedReading());
    book.setRating(to.getRating());
    entityManager.merge(book);
}

@Override
public void updateBook(BookTO to) {
    BookEJB book = entityManager.find(BookEJB.class, to.getISBN());
    book.setFinishedReading(to.getFinishedReading());
    book.setRating(to.getRating());
}

你怎么看?

最佳答案

entityManager.merge() 不仅仅是一个更新操作。它是一个更新或插入 操作,因为 merge() 将插入一个如果数据库中没有这本书的记录,也记录一下。

第二种方式是更新JPA中现有记录的正确方式。但请注意,在更新其属性之前,应检查从 entityManager.find() 返回的 book 对象是否为 null。如果在数据库中找不到这本书的记录,将返回null,此时你将得到NPE

关于Java EE,如何正确实现更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18888814/

相关文章:

java - EhCache Hibernate 二级缓存 maxBytesLocalHeap 慢

java - Spring MVC XML View

java - 在 for 循环中使用 =+ 不起作用

java - 将文本文件中的数据解析为 HashMap

java - 为什么在启动 REST 服务时添加注释 FormDataParam 会引发异常?

java - JPA - 无法在类上找到适当的构造函数

eclipse - @EmbeddedId : is not mapped as an embeddable

java - 使用选项卡式 Activity 中的 bundle 将值从 Activity 传递到 fragment

java - 如何使用左外连接创建jpql

java - Hibernate 查询未映射的连接表