• Hibernate自动生成表


    当我们没有配置初始化加载hibernate的时候可以用以下代码自动生成数据库表:

    package com.mr.test;
    
    import java.io.File;
    
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.tool.hbm2ddl.SchemaExport;
    
    public class HelloHibernate {
    
        static Session session;
    
        static Configuration config = null;
        static Transaction tx = null;
    
        public static void main(String[] args) {
            /** */
            /**
             * 根据映射文件创建数据库结构
             */
            try {
                config = new Configuration().configure(new File(
                        "src/hibernate.cfg.xml"));
    
                System.out.println("Creating tables...");
    
                SessionFactory sessionFactory = config.buildSessionFactory();
                session = sessionFactory.openSession();
                tx = session.beginTransaction();
    
                SchemaExport schemaExport = new SchemaExport(config);
                schemaExport.create(true, true);
    
                System.out.println("Table created.");
    
                tx.commit();
    
            } catch (HibernateException e) {
                e.printStackTrace();
                try {
                    tx.rollback();
                } catch (HibernateException e1) {
                    e1.printStackTrace();
                }
            } finally {
    
            }
        }
    }

    注意配置文件里参数配置:

    转自:http://blog.csdn.net/zwhfyy/article/details/4514966

    只要在hibernate.cfg.xml添加这句话,就可以自动生成数据表
    <property name="hibernate.hbm2ddl.auto">update</property>

    update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表;如果表里缺少列,则自动添加列。

    还有其他的参数:
    create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失。

    create-drop:启动hibernate时,自动创建表,程序关闭时,自动把相应的表都删除。所以程序结束时,表和数据也不会再存在。

    PS:数据库要预先建立好,因为hibernate只会建表,不会建库

    ==========================================

    表结构和数据总是在程序执行的时候无端的修改,折腾了好长时间,查了很长时间hibernate的数据库映射文件和接口程序,始终没有发现有什么错误,到最后才发现了它!
               <property name="hibernate.hbm2ddl.auto" value="update" />
    解释如下:

    hibernate.hbm2ddl.auto Automatically validate or export schema DDL to the database when the SessionFactory is created. With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly. eg. validate | update | create | create-drop

    其实这个参数的作用主要用于:自动创建|更新|验证数据库表结构。
    如果没有此方面的需求建议set value="none".

    其它几个参数的意思:

    validate               加载hibernate时,验证创建数据库表结构
    create                  每次加载hibernate,重新创建数据库表结构
    create-drop        加载hibernate时创建,退出是删除表结构
    update                 加载hibernate自动更新数据库结构

    如果发现数据库表丢失或新增,请检查hibernate.hbm2ddl.auto的配置 可设置 <property name="hibernate.hbm2ddl.auto" value="none"/>

  • 相关阅读:
    HUSTOJ搭建后为了方便作为Judger调用进行的一些修改操作
    [转]我国古代求解最大公约数的方法-更相减损术
    [转]nodejs导出word
    Java抓取Codeforces——针对某一次提交的源码和数据
    Java以UTF-8格式读写及追加写文件示例
    C++使用fill初始化二维数组
    FNV hash算法
    vitess基础镜像构建流程Centos
    go 工具链目前[不支持编译 windows 下的动态链接库]解决方案
    binlog分析方法
  • 原文地址:https://www.cnblogs.com/tv151579/p/2990809.html
Copyright © 2020-2023  润新知