Я просматривал код, сгенерированный Spring Roo, и заметил, что создаваемый им метод persist()
имеет значение Propagation.REQUIRES_NEW
. Разве распространения по умолчанию будет недостаточно?
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void Entity.persist() {
if (this.entityManager == null) this.entityManager = entityManager();
this.entityManager.persist(this);
}
Некоторая дополнительная информация. Вот журнал ру, который произвел этот код:
// Spring Roo 1.1.0.RELEASE [rev 793f2b0] log opened at 2011-02-04 10:01:02
project --topLevelPackage org.sotest.sscce --projectName Test --java 6
// Spring Roo 1.1.0.RELEASE [rev 793f2b0] log closed at 2011-02-04 10:01:04
// Spring Roo 1.1.0.RELEASE [rev 793f2b0] log opened at 2011-02-04 10:01:06
persistence setup --database GOOGLE_APP_ENGINE --provider DATANUCLEUS
entity --class ~.entities.Entity
exit
// Spring Roo 1.1.0.RELEASE [rev 793f2b0] log closed at 2011-02-04 10:02:55
Я использую базу данных GAE с провайдером DN. Я просто создал сущность, я не трогал какие-либо файлы, кроме выдачи вышеуказанных команд roo. Когда я открываю Entity_Roo_Entity.aj, я получаю вышеуказанный код.
Я попробую это еще раз в последней версии Roo и проверю тот же вывод. Я также опубликую этот вопрос на форуме, связанном с Roo.
Обновление: тот же код генерируется с Roo 1.1.1 (последняя версия)