Hibernate说database.table不存在

时间:2018-01-24 14:00:57

标签: java mysql hibernate

情况 好的,所以我正在学习Hibernate(从2天起如此赦免任何错误),我正在使用mysql数据库,只是尝试创建一个表Employee并在数据库中创建一个条目(演示)。

以下是代码

POJO:

package com.sopra.pojo;
import javax.persistence.*;
@Entity
@Table(name = "EMPLOYEE")
public class Employee {
    @Id
    private int Id;
    private String firstName;
    private String lastName;
    private int salary;

    public int getId() {
        return Id;
    }

    public void setId(int id) {
        Id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

}

hibernate.cfg.xml ,位于src

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.connection.pool_size">1</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name = "hibernate.hbm2ddl.auto">create</property>

        <mapping class="com.sopra.pojo.Employee" />
    </session-factory>
</hibernate-configuration>

EmployeeDBManager.java

package com.sopra.pojo;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class EmployeeDBManager {
    public static void main(String[] args) {
        Employee e = new Employee();
        e.setFirstName("Salim");
        e.setId(672);
        e.setLastName("Shamim");
        e.setSalary(266);
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session =  sessionFactory.openSession();
        Transaction tx =  session.beginTransaction();

        session.persist(e);

        tx.commit();

        session.close();
    }
}

错误

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.employee' doesn't exist

我试过

  1. 在cfg文件中使用:<property name="hibernate.hbm2ddl.auto">update</property>
  2. 有趣的是,当我使用workbench在mysql中手动创建表时,hibernate会丢弃它,因为当我使用drop命令它表示该表不存在时。
  3. 我无法弄清楚故障可能在哪里(新手和互联网没有帮助)。 请提及评论中要求的任何其他详细信息。 请帮忙! 感谢。

2 个答案:

答案 0 :(得分:1)

我使它成功了,我不确定它是否是一个正确的答案但是因为它使它工作我发布它作为答案。 我做了两次更改

  1. 我正在使用hibernate version 5.2.12所以我将其更改为4.2.0并添加了两个以前我没有的文件夹中的jar(总之我现在已经从以下位置导入了Jars:optional,提供了&amp; required文件夹在hibernate用户库中)
  2. 我忽略了一个网址错误

    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    
  3. 在dtd网址中我没有添加www。应该是

    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">`
    

    所以,我的错误。

    无论如何,关于改进这个答案及其成功的原因的评论都深受赞赏。

答案 1 :(得分:0)

添加不同的hibernate自动选项,

使用而不是createupdatecreate-drop

<property name="hibernate.hbm2ddl.auto">update</property>  

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

您可以阅读更多相关信息here