解决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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mc19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值