В моем коде я сделал следующим образом:
Я перепутан с этим поведением, сохраняют метод.
Выручите меня.
код как указано ниже:
//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);
}
}
}
Когда объект в настоящее время управляется (присоединен к сеансу), все его обновления напрямую отражаются в базовом хранилище даже без вызова сохраняются ( )
.
В вашем случае вы загружаете свою сущность, так что она находится в сеансе. Тогда, даже если вы не вызовете persist ()
, он будет обновлен в базе данных при фиксации транзакции.
Описание persist ()
из javadoc:
Сделать экземпляр объекта управляемым и постоянным.
Это означает, что метод ничего не делает в вашем случае, поскольку ваша сущность является и постоянной, и управляемой.
П.С. Когда я говорю «сеанс», я понимаю «диспетчер сущностей»
JPA очень старается быть полезным API, чтобы все, что вы получите от него (или сохраните в нем), впоследствии отслеживалось JPA. Это означает, что любые дальнейшие изменения будут автоматически обрабатываться JPA без какой-либо дополнительной работы с вашей стороны.