Java 不带persistence.xml的JPA
我正在尝试开始使用guicepersist和JPA,它建议通过persistence.xml使用配置。来自本机Hibernate背景,通过编程获得配置,有没有一种简单的方法可以在不使用persistence.xml文件的情况下配置JpaPersistModule,还是必须始终存在剩余persistence.xmlJava 不带persistence.xml的JPA,java,hibernate,jpa,orm,persistence.xml,Java,Hibernate,Jpa,Orm,Persistence.xml,我正在尝试开始使用guicepersist和JPA,它建议通过persistence.xml使用配置。来自本机Hibernate背景,通过编程获得配置,有没有一种简单的方法可以在不使用persistence.xml文件的情况下配置JpaPersistModule,还是必须始终存在剩余persistence.xml 如果不存在这样的选项,则可能需要使用PersistenceProvider(假设“default”以某种方式解析persistence.xml)。关于使用JPA SPI的任何教程?假设
如果不存在这样的选项,则可能需要使用PersistenceProvider(假设“default”以某种方式解析persistence.xml)。关于使用JPA SPI的任何教程?假设您有一个
持久化提供程序
实现(例如Hibernate),您可以使用该方法引导EntityManager工厂
,而无需持久化.xml
但是,您必须实现PersistenceUnitInfo
接口,这很烦人,因此您最好使用Spring或Hibernate,它们都支持在没有persistence.xml
文件的情况下引导JPA:
this.nativeEntityManagerFactory = provider.createContainerEntityManagerFactory(
this.persistenceUnitInfo,
getJpaPropertyMap()
);
其中,由特定于Spring的类实现。根据您想要实现什么以及在什么上下文(ApplicationServer vs CLI,vs s)中,可以使用JPA而不使用
persistence.xml
。我在一个clijava应用程序中实现了这一点,在该应用程序中,我拥有具有相同结构的不同数据库。为此,我手动构建了EntityManagerFactory
PS:配置文件是为了让您的生活更轻松,所以如果可以的话,就使用它。如果您使用的是高于3.1的Spring版本,并且您已经定义了实体类,那么就不需要使用
persistence.xml
@Configuration
@ComponentScan(basePackages = { "com.demoJPA.model" })
@EnableTransactionManagement
public class DemoJPAConfig {
@Bean
public DataSource dataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("org.gjt.mm.mysql.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/cimto");
dataSource.setUser("user");
dataSource.setPassword("pass");
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws PropertyVetoException {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setJpaVendorAdapter(vendorAdapter());
em.setPersistenceUnitName("cimtoPU");
em.setJpaPropertyMap(getJpaProperties());
return em;
}
public Map<String, ?> getJpaProperties() {
return new HashMap<String, Object>();
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
public JpaVendorAdapter vendorAdapter() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setDatabase(Database.MYSQL);
vendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQL5Dialect");
vendorAdapter.setShowSql(true);
return vendorAdapter;
}
}
@配置
@ComponentScan(basePackages={“com.demoJPA.model”})
@启用事务管理
公共类DemoJPAConfig{
@豆子
公共数据源DataSource()引发PropertyVetoException{
ComboPooledDataSource=新ComboPooledDataSource();
setDriverClass(“org.gjt.mm.mysql.Driver”);
setJdbcUrl(“jdbc:mysql://localhost:3306/cimto");
dataSource.setUser(“用户”);
dataSource.setPassword(“pass”);
返回数据源;
}
@豆子
public LocalContainerEntityManagerFactoryBean entityManagerFactory()引发PropertyVetoException{
LocalContainerEntityManagerFactoryBean em=新的LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setJpaVendorAdapter(vendorAdapter());
em.setPersistenceUnitName(“cimtoPU”);
em.setjpapropertypap(getJpaProperties());
返回em;
}
公共映射getJpaProperties(){
返回新的HashMap();
}
@豆子
公共平台transactionManager transactionManager(EntityManager工厂emf){
JpaTransactionManager transactionManager=新的JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
返回事务管理器;
}
公共JpaVendorAdapter供应商适配器(){
HibernateJavaEndorapter vendorAdapter=新的HibernateJavaEndorapter();
setDatabase(Database.MYSQL);
setDatabasePlatform(“org.hibernate.dialogue.mysql5dialogue”);
vendorAdapter.setShowSql(true);
返回供应商适配器;
}
}
注意:
com.demoJPA.model
包必须包含实体类。附加注意:可能没有编译错误,但请确保Spring支持匹配的hibernate版本。例如,Spring4.2是第一个支持Hibernate5.0的,Spring4.3是第一个支持Hibernate5.2的。
@Configuration
@ComponentScan(basePackages = { "com.demoJPA.model" })
@EnableTransactionManagement
public class DemoJPAConfig {
@Bean
public DataSource dataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("org.gjt.mm.mysql.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/cimto");
dataSource.setUser("user");
dataSource.setPassword("pass");
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws PropertyVetoException {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setJpaVendorAdapter(vendorAdapter());
em.setPersistenceUnitName("cimtoPU");
em.setJpaPropertyMap(getJpaProperties());
return em;
}
public Map<String, ?> getJpaProperties() {
return new HashMap<String, Object>();
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
public JpaVendorAdapter vendorAdapter() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setDatabase(Database.MYSQL);
vendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQL5Dialect");
vendorAdapter.setShowSql(true);
return vendorAdapter;
}
}