码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate学习-5-配置文件详解

时间:2016-07-24 12:09:26      阅读:341      评论:0      收藏:0      [点我收藏+]

标签:


自动建表的配置
建完表后,最好关掉配置
<property name="hibernate.hbm2ddl.auto">create</property>
每次都重新建表,如果表已经存在就先删除再创建。


<property name="hibernate.hbm2ddl.auto">create-drop</property>

每次在创建sessionFactory时执行创建表
当调用sessionFactory的close方法的时候,再删除。

<property name="hibernate.hbm2ddl.auto">update</property>

如果不存在就创建;存在就不创建。

<property name="hibernate.hbm2ddl.auto">validate</property>

执行验证,当映射文件与表结构不一样,报错

通过代码自动建表,执行代码后会根据class.hbm.xml文件中的内容自动建表
package com.cx.hello;
import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.junit.Test; /** * Created by cxspace on 16-7-23. */ public class App_ddl { //自动建表 @Test public void testCreate() throws Exception{ //创建配置管理对象 Configuration config = new Configuration(); //加载主配置文件 config.configure(); //创建工具类对象 SchemaExport export = new SchemaExport(config); //建表,这两个参数一个在控制台显示脚本,一个执行脚本 export.create(true,true); } }

 对象映射配置文件详解

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<!--
   映射文件作用,映射一个实体类对象,描述一个对象最终实现可以直接保存对象数据到数据库
-->

<!--
    package 要映射的对象所在的包
   (可选)如果不指定,下面的所有的类都需要指定全路径

    auto-import 默认为true,在写hql的时候自动导入
    包名,如果指定为false,再写hql的时候要写上类的全名

    如:
    session.createQuery("from cn.cxspace.Employee").list();

-->

<hibernate-mapping package="com.cx.hello" >

    <!--
       class 映射某一个对象的(一般情况,一个对象写一个映射文件,小写一个class节点)
         name 指定要映射的对象类型
         table 对象对应的表(如果没有指定表名,默认和对象名一样)

    -->

    <class name="Employee" table="employee">

        <!--对象与表,字段与属性-->
        <!--主键,映射-->
        <id name="empId" column="id">
            <!--

                主键的生成策略

                  identity 自增长 (mysql , db2)

                  native 自增长

                   [会根据数据库自增长的方式选择identity或sequence]

                   如果是mysql数据库,那么使用identity实现自增长

                   如果是oracle,那么使用sequence实现自增长

                   sequence 自增长(序列),oracle中自增长是以序列方式实现的

                   increment 自增长(会有并发问题,一般在服务器集群环境使用会存在并发问题)

                   assigned 指定主键生成策略为手动指定主键的值

                   uuid 指定uuid随机生成的惟一的值

                   foreign  (外键方式)
            -->

            <generator class="native"/>
        </id>

        <!--非主键,映射-->


        <!--

                普通字段映射

                property

                name     指定对象的属性名称

                column 指定对象属性对象表的字段名称,如果不写默认与对象的属性一致。

                       (列名为关键字,需要加单引号或者改列名)

                length 指定字符类型的长度,默认为255

                type 指定表字段的类型

                     java类型 : 必须写类全名

                     hibernate类型 : 直接写类型,都是小写


        -->

        <property name="empName" column="empName" length="20"></property>

        <property name="workDate" column="workDate" ></property>

    </class>

</hibernate-mapping>

关于主键的一些问题

 

     一个表能否有多个主键 ?   不能

 

    为什么要设置主键  ? 数据库存储的数据都是有效的,必须保持唯一。

 

    为什么把id作为主键 ?   id保证了记录的唯一性。

 

    联合主键

    [如果找不到合适的列作为主键,除了用id列已外,一般用联合主键,即多列的值作为一个主键,从而保证记录的唯一性]

 

复合主键的表建立(t1,t1联合主键)

CREATE TABLE t(
  
     t1 int,

     t2 int,

     msg VARCHAR(20),


    PRIMARY KEY(t1 , t2)

);

 

 

 

 

 

 

 

 









Hibernate学习-5-配置文件详解

标签:

原文地址:http://www.cnblogs.com/cxspace/p/5698452.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!