Я понял, что после написания этого вопроса я мог подвести итог в нескольких предложениях. Как я могу управлять транзакциями в Spring-Data-JPA с CDI так же, как и с помощью @Transactional в самой весне?Spring Data JPA - Использование @Transactional в среде CDI вместо среды Spring
Первое, что я сделал, было настроено Spring Data JPA CDI на основе документации здесь. http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/jpa.repositories.html#jpd.misc.cdi-integration
я установить это вверх, и он работает нормально для операций чтения, но не операции записи
Например, их пример в документации будет работать нормально.
List<Person> people = repository.findAll();
Итак, у меня есть базовая настройка.
Возможно, у вас есть опечатки. Это похоже на код, который я выполняю.
@Inject
UserRepository userRepository;
User user;
@Transactional
public void signUpUserAction() {
userRepository.saveAndFlush(user);
}
Тогда я получаю эту ошибку
Caused by: javax.persistence.TransactionRequiredException: no transaction is in progress
На первом я понял, что я не имел @Transactional поэтому я добавил его и до сих пор не работает. (Я считаю, что весной вам нужно использовать АОП XML-файл, чтобы настроить @Transactional так что имеет смысл это не работает в ЭЭ из коробки, я просто не знаю, как заставить его работать.)
FYI аннотирования с этим не работает
@TransactionAttribute(TransactionAttributeType.REQUIRED)
Что-то я пробовал, когда писал этот пост, и я получил его на работу ... но мне не нравится код, и мне все еще интересно использовать @Transactinoal, этот код кажется грязным, я довольно sure @Transactional обрабатывает вызовы других методов, которые являются транзакционными в чистом виде, в то время как этот код не будет.
Это сохраняет и я проверяю его в базе данных.
@Inject
EntityManager em;
@Inject
UserRepository userRepository;
private User user;
public void signUpUserAction() {
em.getTransaction().begin();
userRepository.saveAndFlush(user);
em.getTransaction().commit();
}
Итак, как я могу использовать @Transactional или что-то подобное для управления моими транзакциями?
Благодарим за помощь.
Насколько я могу судить, весенние данные по-прежнему предполагают, что вы в конечном итоге используете весенние бобы; даже если вы работаете с CDI. Интеграция CDI - это просто метод производителя. –