【问题标题】:JPA Hibernate table doesnt existsJPA Hibernate 表不存在
【发布时间】:2018-05-25 11:55:24
【问题描述】:

我有一个问题一直在努力解决,但我无处可去。

我正在使用 JPA Hibernate 创建表,但他没有创建表,而是向我显示了错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 表‘escola.tab_alunos’不存在

这是我的 persistence.xml:

<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_2_0.xsd"
    version=“2.0”>

    <persistence-unit name="banco" transaction-type="RESOURCE_LOCAL">
    <description>
    Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide
    </description>
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>org.halyph.sessiondemo.Event</class>

    <properties>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/escola" />
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="0000" />

        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
    </properties>
</persistence-unit>

这是 Aluno 类:

@Entity
@Table(name=“TAB_ALUNOS”)
@SequenceGenerator(name=“TAB_ALUNOS_PK”, sequenceName=“SEQ_ALUNOS_PK”, allocationSize=1)
public class Aluno {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="TAB_ALUNOS_PK")
    private Long id;

    @Column(length=10, nullable=false)
    private String matricula;

    @Column(length=100, nullable=false)
    private String nome;

    @Column(length=9 ,nullable=false)
    private String sexo;

    @Column(name="DATA_NASCIMENTO", length=10, nullable=false)
    private String dataNascimento;

    @Column(length=30, columnDefinition="DEFAULT 'Ativo'")
    private String situacao;

    // ....
 }

知道如何解决这个问题吗?

仅作记录,我第一次启动该项目时,它工作得很好,但由于我犯了一个错误,我不得不删除表,之后休眠停止创建表,现在我可以'什么都不做

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    修改

    &lt;property name="hibernate.hbm2ddl.auto" value="update" /&gt;

    <property name="hibernate.hbm2ddl.auto" value="create" />
    

    value="update" 修改现有表,而 value="create" 创建表,但如果表已存在,则删除包含数据的表并重新创建表。

    【讨论】:

      【解决方案2】:

      更改&lt;property name="hibernate.hbm2ddl.auto" value="create" /&gt;

      请参阅此处了解 hbm2ddl.auto 的所有可能值

      Hibernate hbm2ddl.auto possible values and what they do?

      【讨论】:

        【解决方案3】:

        出现错误是因为您的 persistance.xml 已配置为更新表。在第一次运行期间,没有创建任何表,因此没有什么要更新的。

        在第一次运行时,设置 &lt;property name="hibernate.hbm2ddl.auto" value="create" /&gt; 以便可以从您的 pojo 创建一个表。然后,将其设置回&lt;property name="hibernate.hbm2ddl.auto" value="update" /&gt;,以便您的表可以更新,而不是在每次运行时创建

        【讨论】:

          【解决方案4】:

          提供架构以及表名,例如

          @Table(name=“TAB_ALUNOS”, schema = "dbo")
          

          【讨论】:

            【解决方案5】:

            我尝试将其更改为:

            <property name="hibernate.hbm2ddl.auto" value="create" />
            

            我也试过改成:

            <property name="hibernate.hbm2ddl.auto" value="create-drop" />
            

            这两个都不起作用。

            【讨论】:

            • 架构“escola”已创建。并且还创建了 seq_alunos_pk。唯一没有被创建的是表 tab_alunos
            • 尝试清理并重新启动您的 DBMS 客户端和 Web 服务器,然后删除您的架构。一切看起来都很好。
            • 我删除了schema,重启了eclipse,重启了mysql服务,甚至直接在粘贴“mysql/data”中删除了schema,错误依旧。
            • 尝试将 xsi:schemalocation 更改为 "xmlns.jcp.org/xml/ns/persistence xmlns.jcp.org/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> 并在文档末尾关闭标签
            • 使用此信息编辑您的问题。这不是问题的答案!
            猜你喜欢
            • 1970-01-01
            • 2013-01-13
            • 1970-01-01
            • 2019-01-12
            • 1970-01-01
            • 1970-01-01
            • 2017-09-29
            • 2018-06-22
            • 1970-01-01
            相关资源
            最近更新 更多