EntityManagerを使用して要素をデータベースに永続化するという問題に遭遇しました。私が見つけた答えに基づいて、私はDaoJpaでそれらの4つの方法を試してそのようなことをしましたが、それでも失敗しました。ここに私が試した4つの方法を添付しました:
コントローラ部分のコード:
@Transactional
SmartProduct smartProduct = new SmartProduct();
smartProduct.setName("Dove Soap");
smartProductDao.persist(smartProduct);
1. DaoJpa:
@Transactional
public void persist(SmartProduct smartProduct) {
entityManager.persist(smartProduct);
動作しません!
2.2。
@Transactional
public void persist(SmartProduct smartProduct) {
entityManager.persist(smartProduct);
entityManager.flush();
私が得た例外:進行中のトランザクションはありません
3.3。
@Transactional
public void persist(SmartProduct smartProduct) {
EntityTransaction emTransaction = entityManager.getTransaction();
emTransaction.begin();
entityManager.persist(smartProduct);
emTransaction.commit();
entityManager.close();
例外:共有EntityManagerでトランザクションを作成することは許可されていません-代わりにSpringトランザクションまたはEJBCMTを使用してください
4.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の助けに感謝します。Springコンテキストでアノテーションを追加すると、解決しました。これが私のSpringコンテキストの以前のバージョンです:
<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>