EntityManagerを使用して要素をデータベースに永続化するという問題を満たしました。私が見つけた答えに基づいて、私はDaoJaでこのようなことをする4つの方法を試みましたが、それでも失敗しました。コントローラ部にEntityManagerは要素をデータベースに保存するためにpersistを使用できません
コード:ここで私は、私が試した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.
@Transactional
public void persist(SmartProduct smartProduct) {
entityManager.persist(smartProduct);
entityManager.flush();
例外:私が得た進行中のトランザクションがない
3.
@Transactional
public void persist(SmartProduct smartProduct) {
EntityTransaction emTransaction = entityManager.getTransaction();
emTransaction.begin();
entityManager.persist(smartProduct);
emTransaction.commit();
entityManager.close();
例外共有EntityMaでのトランザクション アプリケーションは、誰かが私が把握助けてもらえJDBC接続
を供給しなければならない: - nager私が得た
代わりに春 トランザクションを使用するか、またはEJB CMT4.
@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();
例外問題はどうですか?事前に多くの感謝!
感謝JustinKSUの助け。私は春のコンテキストで注釈を追加し、それが解決しました! は、ここに私の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>
persistメソッドで@Transactionalを使ってみましたか? – JustinKSU
申し訳ありません私はポストでそれを言及するのを忘れてしまった。はい、メソッドの前に@Transactionalを4つの方法で追加しました。また、Transactionalアノテーションの後に(readOnly = true)/(readOnly = false)を追加しようとしましたが、(propagation = Propagation.REQUIRED)も追加しましたが、違いはありません。 –
@PersistenceContextを使用してentityManagerを挿入していますか? – JustinKSU