JPA更新操作是在Java Persistence API(JPA)中实现的一种数据库操作,用于更新已存在的数据库记录。它可以使用EntityManager对象来执行,也可以使用Query对象来执行。
EntityManager是JPA中最重要的组件之一,它是一个用于管理实体对象的工具。它可以用来创建、读取、更新和删除实体对象。EntityManager还可以用来执行JPQL语句(Java Persistence Query Language),这是一种面向对象的SQL语法。
Query对象也是JPA中重要的组件之一,它可以用来执行JPQL语句。Query对象有两个重要的方法executeUpdate()和executeUpdate(),前者用于执行INSERT、UPDATE或DELETE语句,而后者则用于执行SELECT语句。
// 使用 EntityManager 来更新数据库记录 EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); User user = em.find(User.class, 1); // 查找 id 为 1 的 User 对象 user.setName("John"); // 更新 User 对象的 name 属性 em.getTransaction().commit(); // 提交事务 em.close(); // 关闭 EntityManager // 使用 Query 来更新数据库记录 Query query = em.createQuery("UPDATE User u SET u.name = :name WHERE u.id = :id"); query.setParameter("name", "John"); // 设置 name 参数 query.setParameter("id", 1); // 设置 id 参数 int result = query.executeUpdate(); // 执行 UPDATE 语句
以下代码显示了如何通过仅使用映射实体的setter方法来更新实体。
下面的代码在persist方法调用后用setter方法更新name字段。
从下一节中的数据库转储我们可以看到,新的值被保存到数据库。
Professor emp = new Professor(); emp.setId(1); emp.setName("name"); em.persist(emp); emp.setName("New name");
以下代码来自Professor.java。
package cn..common; import java.util.Date; import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name="EMP") public class Professor { @Id private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString() { return "Professor id: " + getId() + " name: " + getName(); } }
下面的代码来自PersonDaoImpl.java。
package cn..common; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.transaction.annotation.Transactional; @Transactional public class PersonDaoImpl { public void test(){ Professor emp = new Professor(); emp.setId(1); emp.setName("name"); em.persist(emp); emp.setName("New name"); } @PersistenceContext private EntityManager em; }下载 Update.zip
以下是数据库转储。
Table Name: EMP Row: Column Name: ID, Column Type: INTEGER: Column Value: 1 Column Name: NAME, Column Type: VARCHAR: Column Value: New name
JPA教程 -JPA删除关系示例我们可以通过将引用设置为null来删除映射中的关系,如下所示。以下代码删除了地址和员工之间的链接,然...
JPA教程 -JPA查询连接提取示例以下代码显示了JPQL的连接提取语法。List l = em.createQuery(SELECT e FROM Professor e JOIN FET...
JPA教程 -JPA查询Like示例JPQL支持SQL LIKE操作符,以提供有限形式的字符串模式匹配。每个LIKE表达式由要搜索的字符串表达式,以...
JPA教程 -JPA查询Distinct多对一示例DISTINCT运算符在功能上等同于同名的SQL运算符。收集结果集后,将删除重复值,以便只返回唯...
Java格式 -Java 打印日期/时间格式Java 打印日期/时间格式处理日期,时间和日期时间值。Java 打印日期/时间格式可以应用于格式值...