JPAでHibernateを使用しています。私は@Transactionalで注釈クラスを持ち、このクラス内で私はいくつかのオブジェクトを永続:@TransactionalおよびentityManager.persist(o);
@Transactional
@Repository
public class ImageRepository {
@Autowired
private EntityManager em;
public Image factory(String imageHash) {
Image image = new Image();
image.setHash(imageHash);
em.persist(image);
return image;
}
}
私はHibernateはselect nextval ('hibernate_sequence')
の画像オブジェクトのIDを割り当てることがわかります。しかし、それはすべてです。オブジェクトは、データベースに格納されることはありませんし、私はem.flush();
を実行しようとすると、私は取得しています:
javax.persistence.TransactionRequiredException: no transaction is in progress
はまた、私はすべてのエラーを取得しておりません。
私のアプリケーションコンテキスト:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
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.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
<context:annotation-config/>
<context:spring-configured/>
<context:property-placeholder location="classpath:application.properties"/>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="persistenceUnit"/>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">${database.dialect}</prop>
<prop key="hibernate.hbm2ddl.auto">${database.structure}</prop>
<prop key="hibernate.connection.url">${database.connection}</prop>
<prop key="hibernate.connection.username">${database.username}</prop>
<prop key="hibernate.connection.password">${database.password}</prop>
<prop key="hibernate.connection.driver_class">${database.driver}</prop>
<prop key="hibernate.connection.shutdown">true</prop>
<prop key="hibernate.connection.writedelay">0</prop>
<prop key="hibernate.show_sql">${database.show_sql}</prop>
</props>
</property>
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
</beans>
とのpersistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
</persistence-unit>
</persistence>
私はいくつかのオブジェクトをマージしようとすると、同じことが起こります。
ありがとうございます!
EDIT 3:
(以前の編集は関係ありませんでした)
私は気づいた、私はDWR(DirectWebRemoting)サーブレットからオブジェクトを永続化または編集するとき、私は問題がないこと。私自身のサーブレットから同じことをしようとすると、私は問題を述べています。しかし、私のサーブレットのすべてのBeanは、コンポーネントスキャンと@Componentや@Repositoryのようなアノテーションを使ってSpringによって作成されています。だから私はそのような問題を抱えている必要はありません。
私は、主なapplicationContextではしか持っていますが、servlet-applicationContextではありません。今それは正しく動作します。ヒントありがとう! –