Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不带persistence.xml的JPA_Java_Hibernate_Jpa_Orm_Persistence.xml - Fatal编程技术网

Java 不带persistence.xml的JPA

Java 不带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的任何教程?假设

我正在尝试开始使用guicepersist和JPA,它建议通过persistence.xml使用配置。来自本机Hibernate背景,通过编程获得配置,有没有一种简单的方法可以在不使用persistence.xml文件的情况下配置JpaPersistModule,还是必须始终存在剩余persistence.xml


如果不存在这样的选项,则可能需要使用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;
    }
}