今天有个场景,需要将jpa查询出来的结果集合里的id设置为自1开始自增
如果直接将list去forEach 遍历设置id,最后肯定是报错的
所以这里就需要解决JPA自动持久化的问题
Hibernate的持久化状态默认是和session关联的,并且数据是已经存在与数据库和缓存里的。
如果将查出来的id进行重新设置,那么缓存session中的数据就会发生变化,随后数据库也会被update。
所以这个时候就在重设id之前,先将session中,这些数据给移除。
@PersistenceContext
private EntityManager entityManager;
HibernateEntityManager hEntityManager = (HibernateEntityManager)entityManager;
Session session = hEntityManager.getSession();
itemList.forEach(item -> {session.evict(Item);item.setId(ItemTypeEnum.findByType(item.getType()).getCode());});
首先先用注解注入实体类管理器,然后获取到session,接着调用 evict 移除该数据。
session还有close和clear方法,不过此场景下用evict足够。
来源:oschina
链接:https://my.oschina.net/xiaozhiwen/blog/3186832