解決Hibernate不能自動建立資料庫表的問題
阿新 • • 發佈:2019-01-06
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