TransactionRequiredException: aucune transaction n'est en cours avec Spring Data JPA

Je regardé autour de pour des problèmes similaires, mais ne pouvait pas trouver un solution pour cela:

J'ai un Spring Data JPA application qui à chaque fois que j'essaie de faire une trasaction-je obtenir javax.persistence.TransactionRequiredException: no transaction is in progress.

Je crois qu'il a quelque chose à faire avec le Gestionnaire de Transactions ou de l'Entité Gestionnaire de l'Usine, mais ne peux pas mettre mon doigt sur elle.

Le contexte fichiers sont ici (dernière archivés sont ici), mais ici, c'est la partie de la matière:

<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" />

Un exemple de Référentiel est ici puis création d'un Référentiel d'Usine ici, dont je ne suis pas sûr si j'ai besoin...
Ensuite l'utiliser ici (ligne 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();
}

Un couple de choses sont fausses ci-dessus, mais je j'ai essayé de fixation et ne peut pas:

  1. Lancer et valider les transactions sont explicites.
  2. bankRepository devrait être @Autowired, mais lorsque je fais cela, je reçois null. Cependant, dans ce cas de test il est Autocâblés et les œuvres.

Quelqu'un a été confronté à un problème similaire et qui sait ce qui se passe?
Merci une tonne de prendre le temps de lire ceci. Espérons que la réponse à cette question permettra d'aider d'autres gens.

InformationsquelleAutor Joao Coelho | 2012-01-13