我将jpa与Spring配合使用,配置如下:
accept()
我有一个DAO,它按如下方式注入实体管理器:
@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时,entitymanager的数据不同步。在线程A中,我保留一个实体。之后,我尝试在线程B中读取它,但它不存在(即使我在线程A上进行了刷新)。对于事务处理,我使用spring @Transactional批注。
使用hibternate线程安全的spring jpa的正确方法是什么?我读了很多教程,但它们都使用与我相同的代码。
非常感谢。