您现在的位置是:首页 > 正文

Hibernate自动建表

2024-04-01 02:37:50阅读 3

在使用<property name="hibernate.hbm2ddl.auto" value="create" /> 这个语句自动建表屡试无果后我决定学习另一种看起来比较麻烦的方法来进行自动建表!

配置好的实体类、xxx.hbm.xml文件和xxx.cfg.xml文件需要做的变动不多,只要有下面几处:

xxx.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>
		<property name="show_sql">true</property>
		<property name="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</property>
		<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
		<property name="hibernate.connection.username">system</property>
		<property name="hibernate.connection.password">123456</property>
		<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
		<mapping resource="org/User/hibernate.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

基本是不变的,需要注意的是要自动建表的数据库名要确定,学习的过程中参考网上的资料中有一句

  1.        <!-- 格式化sql -->  
  2.         <property name="hibernate.format_sql">true</property> 

因为感觉格式化会删除掉以前建的表,就没加上,并没有影响最后的结果,哈哈哈。

xxx.hbm.xml文件中表明和主键的生成策略要改动一下:

<hibernate-mapping>
    <class name="org.User.User" table="C_USER">
        <id name="id" type = "int">  
            <!-- 主键生成策略,利用生成器 -->  
            <generator class="uuid"></generator>  
        </id> 
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="PASSWORD" />
        </property>
        <property name="age" type="int">
            <column name="AGE" />
        </property>
        <property name="gender" type="java.lang.String">
            <column name="Gender" />
        </property>
    </class>
</hibernate-mapping>
最后编写测试文件,在src目录下新建TestC_user:

最初找到的代码是这样的:

  1. public static void main(String[] args){  
  2.         //读取的是properties文件  
  3.         //Configuration cfg=new Configuration();  
  4.         Configuration cfg=new Configuration().configure();  
  5.           
  6.         //工具类  
  7.         SchemaExport export=new SchemaExport(cfg);  
  8.         //打到控制台,输出到数据库  
  9.         export.create(truetrue);  
  10.     }

按照这个编写测试类之后在第七行的参数上面总是报错,后来发现这已经是过时的代码了,在网上找到适合hibernate 5.2.10的代码:

package org.Test;

import java.util.EnumSet;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.schema.TargetType;
import org.junit.Test;
public class TestC_user {
	    @Test
     public void test() {
	        ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().configure().build();   
	        Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata();  
	        SchemaExport schemaExport = new SchemaExport();
	        schemaExport.create(EnumSet.of(TargetType.DATABASE), metadata); 
	    }

}

进行测试,测试成功后结果如下图:

自动创建的C_USER:

因为没有添加数据,此时的C_USER表中没有任何内容:



网站文章

  • freebsd编译生成freenas系统

    1. 安装完成freebsd 2. 安装svn :pkg_add -r subversion 3. 安装nanobsd :pkg_add -r nano 4. 安装cdrtools:pkg_add -r cdrtools 5. 重启freebsd系统:reboot 6. mkdir -p /usr/local/freenas 7.取得freebsd的编译源码:svn co https:

    2024-04-01 02:37:43
  • HTML5前端开发之基础篇

    HTML5前端开发之基础篇

    前端开发工程师实际上是负责IT系统工程的,实际上就是负责信息化系统的设计、建设,包括设备、系统、数据库、应用系统的建设的。说白了,你前期就是个做网页的,但是后期会慢慢变得越来越厉害,自己写网站,做各种动画游戏不再话下,喜欢哪个女生,分分钟在网页上给你画出来花。会了这些害怕追不到妹子么?是不是很流弊?   等你进入公司后,一般来说都是这么分工的: 1.产品需求: 由产品经理给出需求文档

    2024-04-01 02:37:01
  • gocv图片读取并展示

    gocv 图片操作读取原图image := gocv.IMRead("image/img.png",gocv.IMReadColor)读取灰度图image = gocv.IMRead("image/i...

    2024-04-01 02:36:53
  • QT样式表设置 之 QComboBox下拉框样式 热门推荐

    /* 未下拉时,QComboBox的样式 */ QComboBox { border: 1px solid gray; /* 边框 */ border-radius: 3px; /* 圆角 */ padding: 1px 18px 1px 3px; /* 字体填衬 */ color: #000; font: normal normal 15px...

    2024-04-01 02:36:16
  • 关于强化学习不可行动作处理问题

    关于强化学习不可行动作处理问题

    在强化学习学习过程中,往往存在这样一种问题:总的动作空间很大,但是在特定状态下有些动作不可行,如何处理?例如:迷宫问题中当智能体处于迷宫边缘(1,1),此时采取向左或者向上的动作都会超出迷宫边缘。在现...

    2024-04-01 02:36:08
  • HttpWebRequest介绍

    HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择。它们支持一系列有用的属性。这两个类位于System.Net命名空间,默认情况下这个类对于控制台程序来说是可访问的。请注意,HttpWebRequest对象不是利用new关键字通过构造函数来创建的,而是利用工厂机制(factory mechanism)通过Create()方法来创建的。另

    2024-04-01 02:35:21
  • 如何使用Spark计算共同好友?

    如何使用Spark计算共同好友?

    文章目录写在前面描述计算MapReduce计算共同好友job1的mapper类job1的Reducer类job1的客户端job2的Mapper类job2的Reducer类job2的客户端写在前面你们好...

    2024-04-01 02:35:13
  • EtherCAT从站调试测试

    EtherCAT从站调试测试

    这是我从设计EtherCAT从站到调试过程中所遇到的一些问题记录。 1.Pin65引脚一定要接地 设计之初在刚上电时连接网线,网口指示灯不亮,也一直Twin不上,怀疑LAN9252未正常工作,最后检查...

    2024-04-01 02:35:05
  • oracle11g、10g同时安装数据导入导出无法识别数据库版本问题

    oracle11g、10g同时安装数据导入导出无法识别数据库版本问题

    案例:同一台机器、同一个windows用户下面同时安装了oracle10g/oracle11g 使用导入导出命令时候出现错误。 如下:导出11g数据库中的数据,出现如下错误 虽然安装了oracle11g,但其无法找到11g的版本信息(红色框中所示)。 原因为:由于先安装的11g,后安装的10g。在写入环境变量的时候10g的环境变量在前,在寻找版本信息的时候直接找到的10g的信息,导

    2024-04-01 02:34:58
  • 解决python3缺少zlib的问题

    记住下载安装zlib之后要对python重新编译链接 https://www.cnblogs.com/galaxy-gao/p/5796488.html

    2024-04-01 02:34:13