当前位置: 首页 > 面试题库 >

如何在Spring JPA Web应用程序中设置一些Hibernate属性?

姜阳
2023-03-14
问题内容

我正在尝试摆脱persistence.xmlSpring JPA
Web应用程序中的典型文件。到目前为止,我已经成功注入EntityManager了以下内容:

@Configuration
@EnableTransactionManagement
public class JpaConfig {

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(){

        LocalContainerEntityManagerFactoryBean factoryBean
            = new LocalContainerEntityManagerFactoryBean();

        factoryBean.setDataSource( this.restDataSource() );
        factoryBean.setPackagesToScan( new String[ ] { "com.jverstry" } );
        factoryBean.setPersistenceUnitName("MyMy");

        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(){
         {
            // JPA properties ...
         }
        };

        factoryBean.setJpaVendorAdapter( vendorAdapter );

        return factoryBean;

    }

    @Bean
    public DataSource restDataSource(){

        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
        dataSource.setUrl("jdbc:hsqldb:mem:testdb");
        dataSource.setUsername("sa");
        dataSource.setPassword("");

        return dataSource;

    }

    @Bean
    public PlatformTransactionManager transactionManager(){

        JpaTransactionManager transactionManager = new JpaTransactionManager();

        transactionManager.setEntityManagerFactory(
            this.entityManagerFactoryBean().getObject() );

        return transactionManager;

    }

}

我设法移动了persistence.xml的属性作为数据源:

<properties>
    ... 
    <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
    <property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>

但是如何设置上面剩下的两个hibernate属性?谢谢


问题答案:

Spring提供了一种使用AbstractJpaVendorAdaptersetDatabase()setGenerateDdl(),尽管setGenerateDdl()不采用DDL模式)以与提供者无关的方式配置这些选项的方法。

另外,您可以将任意属性传递给LocalContainerEntityManagerFactory使用setJpaProperties()(或setJpaPropertyMap()):

Properties props = new Properties();
props.put("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
props.put("hibernate.hbm2ddl.auto", "create");
factoryBean.setJpaProperties(props);


 类似资料:
  • 问题内容: 我刚刚在Windows上创建了我的第一个应用程序。 我如何给它一个图标? 似乎没有任何构建标记可以执行此操作,而且我知道golang不支持资源。 问题答案: 您可以使用akavel / rsrc之 类的工具来生成一个.syso文件,该文件中嵌入了指定的资源,旨在在构建Win32可执行文件时供Go链接器使用。 以lxn / walk应用程序为例,该应用程序将其他元数据嵌入其可执行文件中。

  • 我正在为windows编程JavaFX应用程序,并希望在这些情况下看到应用程序图标 快捷图标(在桌面上,windows开始菜单上) 任务栏图标(即使应用程序固定在任务栏上) (可选).exe-图标 下面的代码似乎很好地完成了它的工作,但是当应用程序运行时,我右按任务栏选择“pin this program”,默认的咖啡杯又会显示出来。当右键单击任务栏项时,杯子就会显示出来-.- 编辑:越来越傻了…

  • Hibernate正在为TABLE_PER_CLASS继承生成临时表,但proc. oracle用户没有这些创建表权限,因此该方法不适合我们的项目。 Hibernate 5.2.8版本据说可以解决这个问题。我们更新了pom。xml相应地覆盖默认的starter hibernate版本设置。 我们仍然没有任何运气与以下财产。 应用属性也更新如下 ** ** 在spring boot应用程序中,此设置

  • 1)第一个疑问与这样一个事实有关:在这个类中,对于每个CRUD方法,我都打开一个新的会话。 我之所以这样做是因为在本教程http://www.tutorialspoint.com/hibernate/hibernate_sessions.htm中我读到: Session对象是轻量级的,设计成每次需要与数据库交互时都要实例化。持久性对象通过会话对象保存和检索。会话对象不应该保持长时间打开,因为它们通

  • 问题内容: 我正在尝试将Hibernate用于多线程应用程序,其中每个线程都检索一个对象并将其插入表中。我的代码如下所示。我每个线程都有本地hibernate会话对象,在每个InsertData中,我都执行beginTransaction和commit。 我面临的问题是很多次我收到“ org.hibernate.TransactionException:不支持嵌套事务” 由于我是hibernate

  • 问题内容: 如何确保从hibernate.cfg.xml加载所有属性,然后以编程方式添加其他属性?我看到了以下代码片段,但它看起来像是全新的配置,而不是现有配置的补充。 问题答案: 您显示的代码段是您所需要的。只需使用您现有的配置,而不是创建一个新的配置即可。 如果不是您实例化配置(例如,spring),则需要扩展创建它的类。