配置应用程序管理类型的JPA
在《Spring in Action》中,读到“配置应用程序类型的JPA”,在实践的过程中遇到很多问题,现在将这个探索的成果记录下来:
详细的代码,在github上。
项目的结构如下:
第一步:配置persistence.xml
注意:配置的名字,“javax.persistence.jdbc.user”
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="spittr-unit" transaction-type="RESOURCE_LOCAL">
<class>com.hef.spittr.domain.Spitter</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/Documents/opt/servers/h2databases/spittr"/>
<property name="javax.persistence.jdbc.user" value="spittr"/>
<property name="javax.persistence.jdbc.password" value="spittr"/>
</properties>
</persistence-unit>
</persistence>
第二步: 使用Java方式,配置JPA,RootConfig.java
@Configuration
@ComponentScan(basePackages = "com.hef.spittr",
excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,
value = EnableWebMvc.class)})
public class RootConfig {
@Bean
public LocalEntityManagerFactoryBean entityManagerFactoryBean() {
LocalEntityManagerFactoryBean emfb =
new LocalEntityManagerFactoryBean();
emfb.setPersistenceUnitName("spittr-unit");
return emfb;
}
@Configuration
@EnableTransactionManagement
public static class TransactionConfig implements TransactionManagementConfigurer {
@Autowired
private EntityManagerFactory emf;
public PlatformTransactionManager annotationDrivenTransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
}
}
第三步:测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {RootConfig.class})
public class SpitterDaoTest {
@Autowired
private JpaSpitterDao jpaSpitterDao;
@Test
public void testShouldNotNull(){
Assert.assertNotNull(jpaSpitterDao);
}
@Test
public void testSaveSpittr(){
Spitter spitter =
new Spitter();
spitter.setFullName("xiaoMing");
spitter.setUsername("xiao");
spitter.setPassword("world");
spitter.setEmail("[email protected]");
spitter.setUpdateByEmail(true);
jpaSpitterDao.saveSpitter(spitter);
}
}