java - 我可以使用 JPA 通过查询语言更新表的多列吗

标签 java jpa

我创建了一张像学生一样的表,并根据年龄(比如年龄 = 22)获取了地址。现在我想将基于年龄“22”的地址更新到表的所有地址列。我该怎么做?

下面是我的代码:

public static void main(String[] args) {
    EntityManager entityManager = Persistence.createEntityManagerFactory(
            "demoJPA").createEntityManager();

    Query query = entityManager.createQuery("SELECT student FROM Student student WHERE student.age = 22");
    System.out.println("Data is" + query.getResultList().size());
    List<Simpletable> simpletable = query.getResultList();

    for (Simpletable simpletable1 : simpletable){
         System.out.println(simpletable1.getAddress());
    }
}

我获取了数据,但我现在该如何更新。是否可以通过循环和 setAddress("US") 进行迭代

最佳答案

由于您正在创建一个独立的应用程序,因此您必须先打开一个事务,然后您可以简单地更改对象中的字段值,当提交事务时,更改会自动刷新到数据库中。

EntityTransaction tx = entityManager.getTransaction();
try {
   tx.begin();
   try {
      for(SimpleTable simpleTable : simpleTables){
         simplaTable.setAddress(newAddress);
      }
   } finally {
      tx.commit();
   }
} catch (Exception e) {
   // handle exceptions from transaction methods
}

--编辑--

无需先获取记录即可编辑所有记录的替代方法是进行批量更新,仍在事务中,如下所示:

entityManager.createQuery("UPDATE SimpleTable s " +
               "SET s.address.state = ?1 " +
               "WHERE s.address.country = ?2")
  .setParameter(1, "FL")
  .setParameter(2, "US")
  .executeUpdate();

关于java - 我可以使用 JPA 通过查询语言更新表的多列吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21510938/

相关文章:

java - 如何从 Google App Engine(Java) 数据存储中的子实体查询父实体?

hibernate - 使用 JPA 或 native 查询计算时间

java - Stack 比扩展 Vector 更好

java - 如何在 Intellij 13.1.4 的 Maven 多模块项目中重建/制作 .iml 文件

java - 如何将 List 或任何不可模拟的对象注入(inject) JMockit 测试用例中的 @Tested Spring beans

mysql - (JPA) 无法使用 hibernate.hbm2ddl.auto 正确实现多对一关系

java - ORM 使用什么来访问数据库

java - 为什么Java的main方法使用String[]而不是String dot dot dot

java - HttpClient 参数未添加到执行方法中

jpa - 如何在 JUnit 中正确使用 Bean 验证 (JSR-303)?