Spring+JPA+Hibernate: сохранитесь обновляет объект удивительно. Пройдите детали

В моем коде я сделал следующим образом:

  • запрошенный для объекта курса
  • заполните его с данными данными курса.
  • courseDao.update (объект), который внутренне звонит, сохраняют (объект) метод.
  • Удивительно, данные получены обновленными успешно.

Я перепутан с этим поведением, сохраняют метод.

Выручите меня.

код как указано ниже:

//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);
        }
    }
}
5
задан Bozho 18 November 2010 в 15:03
поделиться

2 ответа

Когда объект в настоящее время управляется (присоединен к сеансу), все его обновления напрямую отражаются в базовом хранилище даже без вызова сохраняются ( ) .

В вашем случае вы загружаете свою сущность, так что она находится в сеансе. Тогда, даже если вы не вызовете persist () , он будет обновлен в базе данных при фиксации транзакции.

Описание persist () из javadoc:

Сделать экземпляр объекта управляемым и постоянным.

Это означает, что метод ничего не делает в вашем случае, поскольку ваша сущность является и постоянной, и управляемой.

П.С. Когда я говорю «сеанс», я понимаю «диспетчер сущностей»

8
ответ дан 14 December 2019 в 01:07
поделиться

JPA очень старается быть полезным API, чтобы все, что вы получите от него (или сохраните в нем), впоследствии отслеживалось JPA. Это означает, что любые дальнейшие изменения будут автоматически обрабатываться JPA без какой-либо дополнительной работы с вашей стороны.

1
ответ дан 14 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: