EntityManager.persist() не работает с @TransactionalJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 EntityManager.persist() не работает с @Transactional

Сообщение Anonymous »


Я пытаюсь научиться использовать аннотацию @Transactional в Spring (я не использую Spring Boot). Но когда я переключаюсь со своего рабочего метода с помощью Begin() и commit() на метод с @Transactional, мои объекты не сохраняются. Можете ли вы помочь мне понять, что я делаю не так?

Без транзакционного/рабочего метода:

public S save (Sentity) { EntityManager em = pu.getEntityManager(); пытаться { logger.debug("Пытаюсь сохранить " + ((Message)entity).toString()); em.getTransaction().begin(); em.persist(сущность); em.getTransaction().commit(); logger.debug("MessageRepository.save() - после .commit()"); } поймать (PersistenceException е) { logger.error("Объект уже существует"); е.printStackTrace(); } окончательно { Система.out.println(); эм.закрыть(); } возврат объекта; } Если @Transactional/не работает:

@Transactional @Override public S save (Sentity) { EntityManager em = pu.getEntityManager(); em.persist(сущность); возврат объекта; } А вот мой класс PersustanceUtil (pu):

пакет com.cypherf.repository; импортировать jakarta.persistence.EntityManager; импортировать jakarta.persistence.EntityManagerFactory; импортировать jakarta.annotation.PreDestroy; импортировать org.hibernate.SessionFactory; импортировать org.hibernate.boot.MetadataSources; импортировать org.hibernate.boot.registry.StandardServiceRegistry; импортировать org.hibernate.boot.registry.StandardServiceRegistryBuilder; импортировать org.springframework.context.annotation.Bean; импортировать org.springframework.context.annotation.Configuration; импортировать org.springframework.orm.hibernate5.HibernateTransactionManager; импортировать org.springframework.orm.jpa.JpaTransactionManager; импортировать org.springframework.stereotype.Service; импортировать org.springframework.transaction.PlatformTransactionManager; импортировать javax.sql.DataSource; @Конфигурация @Услуга общественный класс PersistenceUtil { частный статический EntityManagerFactory emf = null; @Бин общественный PlatformTransactionManager txManager () { вернуть новый JpaTransactionManager(getEntityManagerFactory()); } /** * Создает фабрику менеджера сущностей как одноэлементный экземпляр и возвращает ее. * * @return EntityManagerFactory */ общественный EntityManagerFactory getEntityManagerFactory () { если (ЭДС == ноль) { синхронизировано (EntityManagerFactory.class) { если (ЭДС == ноль) { окончательный StandardServiceRegistry sr = новый StandardServiceRegistryBuilder() .configure() // Настраивает параметры из hibernate.cfg.xml .строить(); пытаться { emf = новые источники метаданных (ср).buildMetadata().buildSessionFactory(); } поймать (Исключение е) { StandardServiceRegistryBuilder.destroy(sr); бросить е; } } } } возврат ЭДС; } /** * Закрывает фабрику менеджеров объектов. */ @PreDestroy public static void closeEntityManagerFactory() { System.out.println("PersistenceUtil.closeEntityManagerFactory()"); если (ЭДС != ноль) { System.out.println("Закрытие ЭДС"); ЭМФ.закрыть(); } } /** * Возвращает новый экземпляр EntityManager * * @return новый экземпляр EntityManager */ общественный EntityManager getEntityManager () { return getEntityManagerFactory().createEntityManager(); } } Основной класс:
пакет com.cypherf; импортировать com.cypherf.model.Message; импортировать com.cypherf.repository.MessageRepository; импортировать com.cypherf.service.MessageService; импортировать org.slf4j.Logger; импортировать org.slf4j.LoggerFactory; импортировать org.springframework.beans.factory.annotation.Autowired; импортировать org.springframework.context.ApplicationContext; импортировать org.springframework.context.annotation.AnnotationConfigApplicationContext; импортировать org.springframework.context.annotation.ComponentScan; импортировать org.springframework.context.annotation.Configuration; импортировать org.springframework.data.repository.CrudRepository; импортировать org.springframework.transaction.annotation.EnableTransactionManagement; @Конфигурация @ComponentScan @EnableTransactionManagement общественный класс TestSpringApplication { @Autowired частный контекст ApplicationContext; @Autowired частный CrudRepository репозиторий сообщений; @Autowired частная служба сообщений messageService; окончательный статический регистратор Logger = LoggerFactory.getLogger(TestSpringApplication.class); public static void main(String[] args) { ApplicationContext ctx = новый AnnotationConfigApplicationContext(TestSpringApplication.class); Приложение TestSpringApplication = ctx.getBean(TestSpringApplication.class); logger.info("Запуск приложения..."); app.run(аргументы); // Приложение TestSpringApplication = context.getBean(TestSpringApplication.class); //Приложение TestSpringApplication = новое TestSpringApplication(); //app.run(args); } public void run(String... args) { messageRepository.save(new Message("Сообщение первое"); messageRepository.save(new Message("Сообщение второе"); messageService.printAllMessages(); messageRepository.save(new Message("Сообщение второе"); messageService.printAllMessages(); // System.out.println("BEANS:"); // Компоненты List = Arrays.asList(context.getBeanDefinitionNames()); // beans.forEach(bean -> System.out.println(bean)); } }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Ошибка дублирующейся записи JPA в EntityManager.remove, а затем в EntityManager.persist
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • EntityManager.persist() не работает с @Transactional
    Гость » » в форуме JAVA
    0 Ответы
    46 Просмотры
    Последнее сообщение Гость
  • EntityManager persist не сохраняет никаких данных
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • EntityManager persist не сохраняет никаких данных
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • EntityManager.persist(объект) NullPointerException
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»