Я использую Spring с jpa со следующей конфигурацией:
@Configuration
public class JPAConfiguration
{
protected static final String PERSISTENCE_UNIT_NAME = "persistenceUnit";
@Autowired
private DatabaseConfigurationProperties databaseConfigurationProperties;
@Bean
public JpaTransactionManager createJPATransactionManager(EntityManagerFactory emf)
{
JpaTransactionManager jtManager = new JpaTransactionManager();
jtManager.setPersistenceUnitName(PERSISTENCE_UNIT_NAME);
jtManager.setEntityManagerFactory(emf);
return jtManager;
}
@Bean
public LocalContainerEntityManagerFactoryBean createEntityManagerFactoryBean(DataSource dataSource)
{
LocalContainerEntityManagerFactoryBean lcemfb = new LocalContainerEntityManagerFactoryBean();
lcemfb.setDataSource(dataSource);
lcemfb.setPersistenceUnitName(PERSISTENCE_UNIT_NAME);
lcemfb.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
lcemfb.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());
return lcemfb;
}
@Bean
public DataSource getDataSource()
{
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(databaseConfigurationProperties.getDriver());
dataSource.setUrl(databaseConfigurationProperties.getUrl());
dataSource.setUsername(databaseConfigurationProperties.getUser());
dataSource.setPassword(databaseConfigurationProperties.getPassword());
return dataSource;
}
}
У меня есть DAO, который внедряет управление данными следующим образом:
@PersistenceContext(unitName = "persistenceUnit")
protected EntityManager entityManager;
Каким-то образом, когда я использую этот DAOв потоках данные управления данными не синхронизированы. В теме A я сохраняю сущность. После этого я пытаюсь прочитать его в потоке B, а его нет (даже если у меня есть поток в потоке A). Для обработки транзакций я использую аннотацию пружины @Transactional.
Как правильно получить пружину jpa с безопасностью гибкой нити? Я прочитал много уроков, но они все используют тот же код, что и я.
спасибо большое.