EntityManager не может использовать persist для сохранения элемента в базе данных
я столкнулся с проблемой сохранения элемента в базе данных с помощью EntityManager. Основываясь на ответах, которые я нашел, я попробовал эти 4 способа в моем DaoJpa, чтобы сделать это, но все равно не удалось. Здесь я приложил четыре способа, которые я пробовал:
код в части контроллера:
@Transactional
SmartProduct smartProduct = new SmartProduct();
smartProduct.setName("Dove Soap");
smartProductDao.persist(smartProduct);
1. Даоджпа:
@Transactional
public void persist(SmartProduct smartProduct) {
entityManager.persist(smartProduct);
не работает!
2.
@Transactional
public void persist(SmartProduct smartProduct) {
entityManager.persist(smartProduct);
entityManager.flush();
исключение, которое я получил: Нет транзакции прогресс!--9-->
3.
@Transactional
public void persist(SmartProduct smartProduct) {
EntityTransaction emTransaction = entityManager.getTransaction();
emTransaction.begin();
entityManager.persist(smartProduct);
emTransaction.commit();
entityManager.close();
исключение у меня: Не разрешено создавать транзакции в общем EntityManager-использовать Spring транзакции или EJB CMT вместо
4.
@Transactional
public void persist(SmartProduct smartProduct) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceUnit");
EntityManager em = emf.createEntityManager();
EntityTransaction etx = em.getTransaction();
etx.begin();
em.persist(smartProduct);
etx.commit();
em.close();
emf.close();
исключение у меня: Приложение должно предоставлять соединения JDBC
может кто-нибудь помочь мне выяснить проблему, пожалуйста? Большое спасибо заранее!
большое спасибо JustinKSU помощь. Я добавляю аннотацию в весеннем контексте, а затем она решена! Вот предыдущая версия моего весеннего контекста:
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="persistenceUnitName" value="persistenceUnit" />
<property name="dataSource" ref="dataSource" />
</bean>
после добавления
<tx:annotation-driven />
работает:
<tx:annotation-driven />
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="persistenceUnitName" value="persistenceUnit" />
<property name="dataSource" ref="dataSource" />
</bean>
2 ответов
чтобы включить @Transactional в вашем весеннем контексте, вы должны иметь следующее:
подходит для вашей версии Spring:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
включить аннотации:
<tx:annotation-driven />
объявите, что ваш менеджер транзакций вводит ваш entity manager:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
Если у вас все еще есть эта проблема, и все конфигурации в порядке, убедитесь, что аннотированный метод @Transaction является общедоступным, не защищенным для идентификации/управления менеджером транзакций.