Spring + JPA + Hibernate: нет вставок при запуске - PullRequest
1 голос
/ 18 января 2012

Я выполняю метод во время запуска с @PostConstruct аннотацией.Этот метод должен проверить значение, хранящееся в таблице в БД.Если он не существует, он должен вставить его.Проверка значения в БД выполнена правильно, однако, если бы мне пришлось сохранить его, он не будет записывать его в БД.Он не выдает никаких исключений, и persist() выполняется (по-видимому) без проблем, только значение не вставляется в БД.

Более того, когда все закончится, если я вызову этот метод вручную (изКонтроллер, например), он будет правильно вводить значение.

@PostConstruct
public void insertIfNecessary()
{
   Request r = Request.findRequestForUser(this.me);
   if ( r == null )
   {
      r = new Request();
      r.setOwner(this.me);
      r.persist();
   }
}

Знаете ли вы, что может быть не так?

С уважением, Мигель

1 Ответ

1 голос
/ 18 января 2012

Убедитесь, что транзакция зафиксирована, а не откатана.

добавить @Transactional к методу


Добавлено:

Второе, что нужно убедиться, это то, что аннотация @Transactional(readonly=false) учтена! Если вы используете Spring Proxy AOP (не AspectJ), то это означает, что метод, помеченный @Transactional(readonly=false), должен быть вызван (напрямую) из другого компонента.

...