Я работаю над проектом 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>
Таким образом, ошибка появляется в части сброса. Без этой строки я не получил ошибку, но моя база данных была пуста ... Поэтому я должен найти способ сохранить мой объект в базе данных. Кто-нибудь может мне помочь?