In my code, I did as follows:
- queried for a course entity
- populate it with the given course data.
- courseDao.update(entity) which internally calls persist(entity) method.
- Surprisingly, the data is got updated successfully.
I am confused with this behaviour of persist method.
Please help me out.
code is as below:
//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);
}
}
}
When an entity is currently managed (attached to a session), all updates to it are directly reflected to the underlying storage even without calling
persist().In your case, you load your entity, so it’s in the session. Then even if you don’t call
persist()it will be updated in the database on transaction commit.The
persist()description from the javadoc:This means that the method doesn’t do anything in your case, since your entity is both persistent and managed.
P.S. Where I say “session”, understand “entity manager”