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

HibernateJpaVendorAdapter的generateDdl不会更改表

华锦程
2023-03-14
问题内容

我正在使用Spring + JPA + Hibernate开发一个网站。在持久性配置(JPA +
Hibernate)中,我将HibernateJpaVendorAdapter的generateDdl属性设置为true,实际上新实体在数据库中正确创建了新表。

但是,一旦创建了表,如果我向实体添加属性,我希望HibernateJpaVendorAdapter能够更改表并添加列。这没有发生,这很奇怪,因为在Java
AbstractJpaVendorAdapter的setGenerateDdl方法文档中有:“设置是否在EntityManagerFactory初始化后创建,
更新 / 更新 所有相关表后生成DDL 。”

JPA + Hibernate配置:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${db.driverClassName}" />
    <property name="url" value="${db.url}" />
    <property name="username" value="${db.username}" />
    <property name="password" value="${db.password}" />
</bean>

<bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />
    <property name="showSql" value="${db.showSql}" />
    <property name="generateDdl" value="${db.generateDdl}" />
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter" ref="jpaAdapter" />
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
        </props>
    </property>
    <property name="dataSource" ref="dataSource" />
</bean>

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence
        xmlns="http://java.sun.com/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
   http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
        version="1.0">

    <persistence-unit name="m8tsPU" />
</persistence>

难道我做错了什么?


问题答案:

通过直接设置适当的特定于Hibernate的属性,您可以对DDL生成进行更细粒度的控制:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
     ...
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            ...
        </props>
    </property>
</bean>

或者,可以使用create-drop代替update,因为update在某些情况下可能会引起问题。但是请注意,自动DDL更新不适合生产使用。



 类似资料:
  • 我有一个带有openSUSE Leap 42.3的虚拟机和一个LAMP堆栈。 现在我想建立一个名为TYPO3的CMS。安装工具告诉我,我应该更改以下设置: PHP脚本执行时间低 PHP最大输入变量非常低 我打开了/etc/php7/cli/php。ini并更改了值。但是在重新启动Apache web服务器并执行phpinfo()之后;,没有什么变化。 这是phpinfo()告诉我的: 配置文件(p

  • 问题内容: 使用由JSF,Spring和Hibernate组成的应用程序。我的示例正常运行,然后当我将class =“ org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter”更改为class =“ org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter”时,应用

  • 在这种情况下,我更改选择元素并调用数据更新方法。该方法从状态获取值。但是当数据更新时,状态还没有改变。当您再次调用数据更新时,状态已经更新了如何正确进行更新? 反应成分

  • 我在一个应用程序的前端原型上工作,该应用程序具有给定的JS、React和CoreUI4 React技术栈。我来自Python背景,在网络开发和我给定的技术堆栈方面没有太多经验。当我不得不开始使用钩子时,这一点变得很明显。 问题 我真的不明白为什么它不更新我的和/或不渲染。我需要一个条件渲染,我也使用。 我试图: 从我的主应用程序中传递一个更大的状态,一旦我启动条件逻辑(挂钩规则)就无法工作。 当我

  • 问题内容: 我用来加载图像。值是从一些范围变量加载的,如下所示: 我的问题是,当我运行时,它会使属性为空,但不会在属性中反映出来。因此,我不断看到需要空占位符的图像。 我该如何处理? 问题答案: 这是ngSrc和ngHref指令的预期行为。这些指令仅支持识别新路径,但是当路径不可用时,这些指令将以静默方式退出(我在这里看到一个拉取请求。)。 因此,当图像变量不再可用时,可能的解决方法是将ngSho

  • 问题内容: 我有一个奇怪的问题。我设置了一个JProgressBar: 但是,只有当我将setValue函数放在代码中的某些位置(而不是到处都是)时,它才会更改: 那么,我在做什么错呢?为什么第二条指令不起作用? 问题答案: 进度栏的值实际上已更新。但这还不只是在屏幕上。通常,我们在循环中使用进度条。但是,当您处于循环中时,您可能 通过单击按钮来调用 该循环,但该循环没有被绘制。为什么?因为您通过