我有一个简单的项目,在数据库(MySQL)中有一个类和一个对应的表。如果将hbm2ddl.auto set create放在hibernate配置文件中,它可以正常工作。但是,如果我把它拿出来。该代码抛出以下异常:
错误:未找到表“学生”; SQL语句:
进入学生(fname,lname,entrance)值(?,?,?)[42102-185]
org.hibernate.exception.SQLGrammarException:无法准备语句
我已经在数据库中创建了表但我不知道为什么hibernate找不到表。我不确定与数据库的连接是如何工作的。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </property>
<property name="hibernate.CONNECTION.driver_class"> com.mysql.jdbc.Driver </property>
<!-- Assume test is the database name -->
<property name="hibernate.CONNECTION.url">
jdbc:mysql://localhost:3306/sample;MVCC=TRUE;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;SCHEMA=sample
</property>
<property name="hibernate.connection.username"> root </property>
<property name="hibernate.connection.password"> **** </property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- -->
<property name="hbm2ddl.auto">create</property>
<!-- List of XML mapping files -->
<!-- -->
<mapping resource="Student.hbm.xml" />
<!-- <mapping class="ourPackage.Student" /> -->
</session-factory>
</hibernate-configuration>
学生班:
@Entity
@Table(name="student")
public class Student implements Serializable{
public Student(){
}
public Student(int id, String fName, String lName, String ent){
this.id = id;
this.fname = fName;
this.lname = lName;
this.entrance = ent;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}
public String getEntrance() {
return entrance;
}
public void setEntrance(String entrance) {
this.entrance = entrance;
}
@Id
@GeneratedValue
private int id;
private String fname;
private String lname;
private String entrance;
}
学生hibernate配置
<hibernate-mapping>
<class name="ourPackage.Student" table="student">
<meta attribute="class-description">
This class contains the employee detail.
</meta>
<id name="id" type="int" column="id">
<generator class="native"/>
</id>
<property name="fname" column="fname" type="string"/>
<property name="lname" column="lname" type="string"/>
<property name="entrance" column="entrance" type="string"/>
</class>
</hibernate-mapping>
主要课程
public class StudentDB {
private static SessionFactory factory;
private static ServiceRegistry serviceRegistry;
@SuppressWarnings("deprecation")
public static void main(String[] args) {
try {
// factory = new Configuration().configure().buildSessionFactory();
createSessionFactory();
} catch (Throwable ex) {
System.err.println("Failed to create sessionFactory object." + ex);
throw new ExceptionInInitializerError(ex);
}
StudentDB ME = new StudentDB();
Integer empID1 = ME.addStudent("Alex", "Jason", "2005");
ME.listStudent();
factory.close();
}
public void listStudent() {
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Query temp = session.createQuery("from Student");
List students = temp.list();
for (Iterator iterator = students.iterator(); iterator.hasNext();) {
Student student = (Student) iterator.next();
System.out.print("First Name: " + student.getFname());
System.out.print(" Last Name: " + student.getLname());
System.out.println(" entrance: " + student.getEntrance());
}
tx.commit();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
}
public static SessionFactory createSessionFactory() {
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(
configuration.getProperties()).buildServiceRegistry();
factory = configuration.buildSessionFactory(serviceRegistry);
return factory;
}
}