使用Hibernate持久性提供程序和设置javax.Persistence.schema-generation属性的Spring JPA

使用Hibernate持久性提供程序和设置javax.Persistence.schema-generation属性的Spring JPA,spring,hibernate,jpa,derby,Spring,Hibernate,Jpa,Derby,我使用SpringJPA,Hibernate作为持久性提供者,Derby作为数据库。(具体来说,JAR的版本是Spring版本4.3.4、Hibernate实体管理器版本5.2.10和Derby 10.13.1.1) 我想检查一下正确的方法 JPA属性中的架构生成 如何使用步骤1生成的模式创建数据库模式 (注意,这不是Spring启动应用程序。) 我的应用程序配置文件如下: <context:annotation-config /> <context:component-sca

我使用SpringJPA,Hibernate作为持久性提供者,Derby作为数据库。(具体来说,JAR的版本是Spring版本4.3.4、Hibernate实体管理器版本5.2.10和Derby 10.13.1.1)

我想检查一下正确的方法

  • JPA属性中的架构生成
  • 如何使用步骤1生成的模式创建数据库模式
  • 注意,这不是Spring启动应用程序。

    我的应用程序配置文件如下:

    <context:annotation-config />
    <context:component-scan base-package="org.service"/>
    <context:component-scan base-package="org.repository"/>
    
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="packagesToScan">
            <array>
                <value>org.model</value>
                <value>org.repository</value>
                <value>org.service</value>
            </array>
        </property>
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.DerbyTenSevenDialect</prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.format_sql">false</prop>
                <prop key="hibernate.hbm2ddl.auto">none</prop>
            </props>
        </property>
    
        <property name="persistenceProvider">
            <bean class="org.hibernate.jpa.HibernatePersistenceProvider"></bean>
        </property>
    </bean>
    
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="dataSource" ref="dataSource"/>
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>
    
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver"/>
        <property name="url" value="jdbc:derby:C:\\tmp\\testdb"/>
        <property name="username" value="test"/>
        <property name="password" value="test"/>
    </bean>
    
    <jpa:repositories base-package="org.repository"></jpa:repositories>
    
    
    org.model
    org.repository
    组织服务
    org.hibernate.dialogue.derbytensevendialogue
    假的
    假的
    没有一个
    
    对于步骤(1),我的调查和测试表明,可以在JPAPProperties属性内设置持久性模式生成,如下所示:

    <prop key="javax.persistence.schema-generation.scripts.action">create</prop>
    <prop key="javax.persistence.schema-generation.scripts.create-target">create.sql</prop>
    
    创建
    create.sql
    
    这将生成一个create.sql文件。对于步骤(2),我使用

    脚本
    create.sql
    创造
    

    但是,我仍然需要在URL jdbc:derby:C:\tmp\testdb中设置create=true吗?上面的javax.persistence.schema-generation行是否假设数据库已经创建

    我可以通过命令行和Derby创建数据库,例如java-Dij.database=jdbc.Derby:C:\tmp\testdb;create=true org.apache.derby.tools ij。我想检查模式生成是否仅限于在创建数据库后创建模式;Derby允许您连接到已经存在的数据库,即使您在JDBC连接URL中指定了
    create=true
    。可以将其视为“如果不存在则创建”。@BryanPendleton create=true的使用如何处理javax.persistence.schema-generation?JPA是否只对模式的创建进行标准化?对不起,我对JPA了解不多。只是想帮我打德比。
    <prop key="javax.persistence.schema-generation.create-source">script</prop>
    <prop key="javax.persistence.schema-generation.create-script-source">create.sql</prop>
    <prop key="javax.persistence.schema-generation.database.action">create</prop>