Транзакция не выполняется: для транзакции постоянства javax требуется исключение - PullRequest
0 голосов
/ 03 ноября 2019

Я работаю над проектом Spring Framework, который должен сохранить некоторые объекты в базе данных. Несмотря на то, что методы, которые должны сохраняться, сущности аннотируются @Transactional, а класс имеет @EnableTransactionManagement, я получаю исключение в методе flush (), который говорит: транзакция не выполняется. Мой код выглядит так:


public interface Client {

    @Transactional(
            value = "clientTransaction",
            propagation = Propagation.REQUIRED
    )
    void obtainObjectFromServiceResponseAndPersist(AccountKey var1);

public class WebClient implements Client {

public AccountPersistence accountPersistence;

@Override
    public void obtainObjectFromServiceResponseAndPersist(AccountKey var1) {

          ObjectMapper mapper = new ObjectMapper();
          mapper.registerModule(new JavaTimeModule());        
          mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
          AccountResponse result = mapper.readValue(response, AccountResponse.class);

          for (Results resultItem : result.getResults()) {

                ClientAccount account = resultItem.toDAO();
                account.setAccountkeyId(var1);
                accountPersistence.persistObject(account );

          }
}

@EnableTransactionManagement
public class AccountPersistence {

    @PersistenceContext(unitName = "current_project")
    public EntityManager em;

    @Transactional(
            value = "clientTransaction",
            propagation = Propagation.REQUIRED
    )
    public long persistObject(ClientAccount account) {

        long accountId= 0;

        try
        {
            logger.debug("Start Persisting...");
            em.persist(account);
            em.flush();
            // unique ID
            accountId= account.getId();
            logger.debug("Persist done");
        }
        catch (Exception e)
        {
            logger.error("Exception occurs", e);
        }

        return accountId;
    }
<bean id="transactionManager_DEMO" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactoryDemo" />
<qualifier value="clientTransaction" />
</bean>

<bean id="entityManagerFactoryPDCurrentProject"
 class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="datasource_DEMO" />
<property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter" />
<property name="persistenceUnitName" value="current_project" />
<property name="jpaProperties">
<props>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.cache.use_query_cache">false</prop>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
<prop key="hibernate.hbm2ddl.auto">none</prop>
<prop key="hibernate.show_sql">false</prop>
</props>
</property>

Таким образом, ошибка появляется в части сброса. Без этой строки я не получил ошибку, но моя база данных была пуста ... Поэтому я должен найти способ сохранить мой объект в базе данных. Кто-нибудь может мне помочь?

...