私は同様の問題を探しまし たが、これに対する解決策を見つけることができませんでした:
私はSpring Data JPAアプリケーションを持っており、トランザクションを実行しようとするたびにjavax.persistence.TransactionRequiredException: no transaction is in progress
.
Transaction Manager または Entity Manager Factory と関係があると思いますが、はっきりとはわかりません。
コンテキスト ファイルはここにあります(最新のチェックインはここにあります) が、重要な部分は次のとおりです。
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSourceMySQL" />
<property name="persistenceUnitName" value="spring-jpa" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="true" />
<property name="showSql" value="true" />
<property name="database" value="MYSQL" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSourceMySQL"/>
</bean>
<bean id="dataSourceMySQL" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/dbname"/>
<property name="username" value="user"/>
<property name="password" value="pass"/>
</bean>
<jpa:repositories base-package="com.simplecash.dal.repository" />
サンプルのリポジトリがここにあり、リポジトリ ファクトリをここに作成しましたが、これが必要かどうかはわかりません...次に、ここで使用します(34 行目)。
public void populateWithTestData() {
Bank bank = new Bank();
bank.setName("ContentName");
bank.setCode("ContentCode");
RepositoryFactory.getEntityManager().getTransaction().begin();
BankRepository bankRepository = RepositoryFactory.getRepository(BankRepository.class);
bankRepository.save(bank);
bankRepository.flush();
RepositoryFactory.getEntityManager().getTransaction().commit();
}
上記のいくつかの点が間違っていますが、修正しようとしましたが、できません。
- Begin および Commit トランザクションは明示的です。
bankRepository
である必要がありますが@Autowired
、それを行うと が得られnull
ます。ただし、このテストケースでは Autowired で動作します。
誰かが同様の問題に直面し、何が起こっているのか知っていますか? これを読んでくれてありがとう。この質問に対する答えが他の人々に役立つことを願っています。