解决JPA使用Set属性时自动持久化

前提是你 提交于 2020-03-03 22:07:01

今天有个场景,需要将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足够。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!