java - JPA 持久性问题
问题描述
我无法在 JPA 中记录我的数据库。我的设置是为 JPA 设置的,我正在使用休眠作为服务。我有以下代码。
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
List<Beer> beiren = FindBeers();
List<Beer> aa = beiren.stream().map(x-> {
x.setPrice(x.getPrice()*1.02F);
return x;
}).collect(Collectors.toList());
Collections.copy(beiren,aa);
beiren.stream().forEach(System.out::println);
tx.commit();
em.close();
emf.close();
当我更改北人列表中的价格值时,我希望它在实体管理器关闭时对数据库产生影响。因为我猜它是在一种持久的领域。如果我在这里所做的一切都正确,那么我的班级结构中可能还有其他问题。
请你帮助我好吗?我做错了什么?谢谢你...
解决方案
在提交之前添加这一行。如果您正在 EntityManager 中寻找可以保存或更新集合的东西,答案是否定的。你将不得不循环。如果记录存在,EntityManager.merge() API 将更新,否则将插入新记录。
aa.stream().foreach(em::merge);
希望它会奏效。
推荐阅读
- c++11 - 用大括号初始化一个类是否保证所有成员都被默认初始化?
- karate - 检查 id 对于 Karate 是否是唯一的,而不是 JS 或 Java
- parsing - Haskell 中的记录解析
- nativescript - 如何为 Apple 笔记扩展添加我的 APP
- sql-server - 在单个 SQL Server 表中批量导入 txt 文件,使用文件名作为键列
- c++ - 如何在编译时解析静态 const std::string?
- swift - 单击 uicollectionviewcell 中的缩略图并在新视图中显示完整图像
- php - 如何在 WooCommerce 产品页面中添加用户输入字段
- mysql - 在 macOS 上通过 brew 安装时如何卸载 MySQL 5.6?
- unit-testing - 在辅助函数中包装 httptest 方法