1. 程式人生 > >解決Hibernate不能自動建立資料庫表的問題

解決Hibernate不能自動建立資料庫表的問題

HibernateTest(測試類):

package club.mochunrong.hibernate.test;


import java.io.PrintStream;
import club.mochunrong.hibernate.bean.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

public class HibernateTest
{
  public static void main(String[] args)
  {
    try
    {
      Configuration configuration = new Configuration()
        .configure();
      

      ServiceRegistry serviceRegistry = 
        new StandardServiceRegistryBuilder().applySettings(configuration.getProperties())
        .build();
      


      SessionFactory sf = configuration.buildSessionFactory(serviceRegistry);
      
      System.out.println(sf);
      

      User user = new User();
      user.setId(12);
      user.setName("moxi");
      user.setAge(10);
      

      Session session = sf.openSession();
      
      Transaction tx = session.beginTransaction();
      
      session.save(user);
      
      tx.commit();
      session.close();
      sf.close();
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }
}

User(持久化類):
package club.mochunrong.hibernate.bean;


import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity(name="tb_user2")
public class User
  implements Serializable
{
  @Id
  @Column(name="TB_ID")
  private int id;
  @Column(name="TB_NAME")
  private String name;
  private int age;
  
  public int getId()
  {
    return this.id;
  }
  
  public void setId(int id)
  {
    this.id = id;
  }
  
  public String getName()
  {
    return this.name;
  }
  
  public void setName(String name)
  {
    this.name = name;
  }
  
  public int getAge()
  {
    return this.age;
  }
  
  public void setAge(int age)
  {
    this.age = age;
  }
  
  public String toString()
  {
    return "User [id=" + this.id + ", name=" + this.name + ", age=" + this.age + "]";
  }
}
hibernate.cfg.xml(配置檔案)
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>

	<!-- MySQL資料庫的配置 -->
	<!-- 資料庫方法:告訴hibernate是什麼資料庫 -->
	<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
	<!-- 資料庫驅動 -->
	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	<!-- 資料庫的連線地址 -->
	<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/haha</property>
	<!-- 使用者名稱 -->
	<property name="hibernate.connection.username">root</property>
	<!-- 密碼 -->
	<property name="hibernate.connection.password">chunrong</property>

	<!-- ### c3p0連線池  ### -->
	<property name="hibernate.c3p0.max_size">10</property>
	<property name="hibernate.c3p0.min_size">2</property>
	<property name="hibernate.c3p0.timeout">5000</property>

	<!-- 因為hibernate的sql語句是自動生成的 ,所有通過此配置來顯示自動生成的sql語句輸出 -->
	<property name="hibernate.show_sql">true</property>
	<!-- 格式化輸出的sql語句: 看起來更加清楚   -->
	<property name="hibernate.format_sql">true</property>

	<!-- hibernate的表是自動建立的:
		根據持久化類(User Book),自動建立持久化類物件的表
		正是因為hibernate的表示根據持久化類自動建立的
		所以持久化類才可以與資料庫表直接對映。
		
		update : 如果持久化類對應的表不存在就自動建立,如果持久化類對應的表存在就不建立。
	-->
	<property name="hibernate.hbm2ddl.auto">update</property>

	<!-- 配置持久化類的對映 -->
	<mapping class="club.mochunrong.hibernate.bean.User" />

</session-factory>
</hibernate-configuration>

導包圖:


——————————————————————————————————————————————


測試類中要注意了:

Configuration configuration = new Configuration()
        .configure();
      

      ServiceRegistry serviceRegistry = 
        new StandardServiceRegistryBuilder().applySettings(configuration.getProperties())
        .build();
      


      SessionFactory sf = configuration.buildSessionFactory(serviceRegistry);

以上的語句不適合新版本的Hibernate
以上用的版本是“hibernate-release-4.3.11.Final”目前我只知道適合這個版本,其他版本還沒有試。



如果用太高的Hibernate版本,這些語句,在myelicpse裡面就會報錯,曾我試過換資料庫,改資料庫ini裡面的驅動格式,還有配置檔案裡面的修修改改,搞了差不多三天,也查了三天的資料,原來我弄的版本不一樣,我對著視訊跟著老師弄,老師卻很順的用Hibernate自動建立了表,而我,在官網下載最新版本,照樣按照他的程式碼逐個逐個的敲,卻錯誤!那麼我就開始找原因了,知道今天我才知道,【有一些版本高的Hibernate的包,有新的技術用新的aip,以前的不適合罷了。】

也好,因為這個問題,讓我遇見了CSDN!






hibernate-release-4.3.11.Finals下載地址:


連結:http://pan.baidu.com/s/1qZ0IVxi 密碼:x489