gpt4 book ai didi

java - Spring+JPA+Hibernate : persist is updating the entity surprisingly. 请看详细

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:16 25 4
gpt4 key购买 nike

在我的代码中,我做了如下操作:

  • 查询类(class)实体
  • 用给定的类(class)数据填充它。
  • courseDao.update(entity) 内部调用 persist(entity) 方法。
  • 令人惊讶的是,数据更新成功了。

我对 persist 方法的这种行为感到困惑。

请帮帮我。

代码如下:

//My Service......
@Service("myService")
@Transactional
public class MyServiceImpl implements MyService {

@Transactional(rollbackFor = { Throwable.class })
public void updateCourse(final Course course) throws MyServiceException {
------
------
CourseEntity courseEntity = courseDao.findById(course.getId());
populateCourseEntity(courseEntity, course);

courseDao.update(courseEntity);
}
}

//CourseDao.....

public class CourseDaoImpl implements CourseDao {
--------
public void update(final T entity) throws MyDaoException {
if (entity != null) {
this.entityManager.persist(entity);
}
else {
String errMsg = "Object to be updated cannot be null.";
throw new MyDaoException(errMsg);
}
}
}

最佳答案

当前管理实体(附加到 session )时,即使不调用 persist(),对其的所有更新也会直接反射(reflect)到底层存储。

在你的例子中,你加载了你的实体,所以它在 session 中。然后,即使您不调用 persist(),它也会在事务提交时更新到数据库中。

javadoc 中的 persist() 描述:

Make an entity instance managed and persistent.

这意味着该方法在您的情况下不会执行任何操作,因为您的实体既是持久化的又是托管的。

附言我说“ session ”的地方,理解“实体管理器”

关于java - Spring+JPA+Hibernate : persist is updating the entity surprisingly. 请看详细,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2207439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com