首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带persistence.xml的JPA

不带persistence.xml的JPA
EN

Stack Overflow用户
提问于 2015-06-18 11:17:30
回答 3查看 6.2K关注 0票数 3

我正在尝试使用Guice Persist和JPA,它建议通过persistence.xml使用配置。来自原生Hibernate后台,配置是以编程方式获得的,有没有一种简单的方法可以在没有persistence.xml文件的情况下配置JpaPersistModule,或者rump persistence.xml必须始终存在?

如果不存在这样的选项,我可能不得不使用PersistenceProvider (假设“默认”以某种方式解析persistence.xml )。有关于使用JPA SPI的教程吗?

EN

回答 3

Stack Overflow用户

发布于 2015-06-18 22:14:40

如果您使用的是高于3.1的Spring版本,并且已经定义了entities类,则不需要使用persistence.xml

代码语言:javascript
复制
@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;
    }
}

注意:com.demoJPA.model包必须包含实体类。

票数 4
EN

Stack Overflow用户

发布于 2015-06-18 15:32:10

假设您有一个PersistenceProvider实现(例如Hibernate),您可以使用PersistenceProvider#createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map)方法来引导EntityManagerFactory,而不需要persistence.xml

然而,令人恼火的是你必须实现PersistenceUnitInfo接口,所以你最好使用Spring或Hibernate,它们都支持在没有persistence.xml文件的情况下引导PersistenceUnitInfo

代码语言:javascript
复制
this.nativeEntityManagerFactory = provider.createContainerEntityManagerFactory(
    this.persistenceUnitInfo, 
    getJpaPropertyMap()
);

其中PersistenceUnitInfo是由特定于Spring的MutablePersistenceUnitInfo类实现的。

票数 3
EN

Stack Overflow用户

发布于 2015-06-18 16:49:48

根据您想要实现什么以及在什么上下文中(ApplicationServer与CLI、CMT transactionsEntityTransaction),可以在没有persistence.xml的情况下使用JPA。我在一个CLI Java应用程序中做到了这一点,在该应用程序中,我拥有具有相同结构的不同数据库。为此,我手动构建了EntityManagerFactory

PS:配置文件是为了让你的生活更轻松,所以如果你可以的话,就使用它吧。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30905908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档