Hibernate之主键属性

这些属性什么的用到的时候直接查api文档就行了。但api文档对于没有经验的初学者可能有些困难。

这里主要是介绍映射文件主键的生成策略。因为用到Hibernate就会用到,所以比较重要。

实体类

package test.hibernate.hbmProperty;

public class User {

    private String id;
    private String name;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

测试类

package test.hibernate.hbmProperty;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

public class App {

    private static SessionFactory sessionFactory = new Configuration()//
            .configure()//
            .addClass(User.class)// 添加Hibernate实体类(加载对应的映射文件)
            .buildSessionFactory();

    @Test
    public void testSave() throws Exception {
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        // --------------------------------------------

        // 构建对象
        User user = new User();
        // user.setId(UUID.randomUUID().toString());//id设为String类型
        user.setName("张三");

        // 保存
        session.save(user);
        // session.save(new User());

        // --------------------------------------------
        session.getTransaction().commit();
        session.close();
    }
}

注意一些模板代码,会话工厂、打开会话、事务的开始关闭…

文件配置

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

<hibernate-mapping package="test.hibernate.hbmProperty">
    <class name="User" table="t_user">

        <!-- id元素用于映射主键。 子元素generator是用于指定主键生成策略的。 -->
        <id name="id">
            <!-- identity:使用数据库的自动增长策略,不是所有数据库都支持,比如oracle就不支持 <generator class="identity"/> -->

            <!-- sequence:在 DB2,PostgreSQL,Oracle,SAP DB,McKoi 中使用序列(sequence) 在使用Oracle数据库时可以使用这一个
                <generator class="sequence"/> -->

            <!-- hilo,使用高低位算法生成主键值。 只需要一张额外表,所有的数据都支持。 <generator class="hilo"> <param
                name="table">hi_value</param> <param name="column">next_value</param> <param
                name="max_lo">100</param> </generator> -->

            <!-- 根据底层数据库的能力选择 identity、sequence 或者 hilo中的一个。 <generator class="native"></generator> -->

            <!-- increment:由Hibernate维护的自动增长。 先查询当前最大的id值,再加1使用 不推荐使用,因为在多线程下会问题。
                <generator class="increment"></generator> -->

            <!-- assigned:手工指定主键值 <generator class="assigned"></generator> -->

            <!-- uuid:由Hibernate自动生成UUID并指定为主键值。 -->
            <generator class="uuid"></generator>

        </id>

        <property name="name" />
    </class>
</hibernate-mapping>

数据库表唯一标识主键可以用Integer递增的方式,也可以用uudi,用一个三十几位的字符串唯一标识,由数据库自己生成。

主配置文件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 name="foo">
        <!-- 配置数据库信息 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate_2015</property>
        <!-- 可简写为<property name="connection.url">jdbc:mysql:///hibernate_2015</property> -->
        <property name="connection.username">root</property>
        <property name="connection.password">686175</property>
        <!-- 显示生成的sql语句,不写的话默认是false -->
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>

        <!--  <mapping resource="test/hibernate/domain/User.hbm.xml" />
        <mapping resource="test/hibernate/hbmProperty/User.hbm.xml" />-->
    </session-factory>
</hibernate-configuration>

版权声明:本文为博主原创文章,未经博主允许不得转载。http://blog.csdn.net/lindonglian

时间: 2024-08-29 14:25:28

Hibernate之主键属性的相关文章

hibernate 复合主键映射

第一次写博客,只想把工作中遇到的问题记下来. 最近做了一个二次开发的改造,改完之后被告知数据表主键根据需求需要用复合主键,因为本人菜鸟一枚,复合主键从未用过,只能靠度娘 网上给出的复合主键映射大致就两种 第一种:将复合主键对应的属性与实体其他普通属性放在一起 /*实体类.复合主键必须实现Serialzable接口*/ public class User implements Serialzable { private static final long serialVersionUID=1L;/

hibernate id主键生成策略

数据库的设计和操作中,我们通常会给表建立主键. 主键,可以分为自然主键和代理主键. 自然主键表示:采用具有业务逻辑含义的字段作为表的主键.比如在用户信息表中,采用用户的身份证号码作为主键.但是这样一来,随着业务逻辑的变化,主键就有可能要更改.比如,假设哪天身份证号码升级成19,2位,那....... 代理主键:在表中人为的增加一个字段,该字段并没有表示任何的业务逻辑,仅仅用来标识一行数据.比如说在用户信息表中,增加一个用户ID的字段.用来表示该条用户信息的记录. 通常情况下,用的比较多的是代理主

hibernate联合主键

一. hibernate联合主键类的规则 1. 实现Serializable接口 2. 重写hashCode与equals方法 二.hibernate联合主键的实体类规则原因(与上面规则顺序对应) 1. Hibernate要根据数据库的联合主键来判断某两行记录是否是一样的,如果一样那么就认为是同一个对象,如果不一样,那么就认为是不同的对象.这反映到程序领域中就是根据hashCode与equals方法来判断某两个对象是否能够放到诸如Set这样的集合当中: 2. 使用get或load方法的时候需要先

Hibernate自定义主键

Hibernate自定义主键,通过此方法可以解决一此特殊的主键ID,在了解自定义主键时,先了解下Hibernate有自带的10种生成主键方法. 1) assigned主键由外部程序负责生成,无需Hibernate参与. 推荐此种方法,在实体配置中修改如下: <id name="HId" type="java.lang.String"> <column name="H_ID" length="20" />

Hibernate复合主键映射

目录: 1. 实现方式一:将复合主键对应的属性与实体其他普通属性放在一起 2. 实现方式二:将主键属性提取到一个主键类中,实体类只需包含主键类的一个引用 在日常开发中会遇到这样一种情况,数据库中的某张表需要多个字段列才能唯一确定一行记录,这时表需要使用复合主键.面对这样的情况Hibernate为我们提供了两种方式来解决复合主键问题. 方式一:将复合主键对应的属性与实体其他普通属性放在一起 例如实体类People中"id"和"name"属性对应复合主键: /*实体类,

Hibernate常用主键生成策略

1.assign:适合于应用程序维护的自然主键. 2.increment:代理主键,适合于所有数据库,由hibernate维护主键自增,和底层数据库无关,但是不适合于2个或以上hibernate进程. 3.identity:代理主键,适合于mysql或ms sql server等支持自增的dbms,主键值不由hibernate维护. 4.sequence:代理主键,适合于oracle等支持序列的dbms,主键值不由hibernate维护,由序列产生. 5.native:代理主键,根据底层数据库的

Hibernate各种主键生成策略与配置详解

1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主键的setter方法给主键赋值,至于这个值怎么生成,完全由自己决定,这种方法应该尽量避免. <id name="id" column="id"> <generator class="assigned" /> </id&g

大家一起撸代码之——Hibernate各种主键生成策略与配置详解

1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主键的setter方法给主键赋值,至于这个值怎么生成,完全由自己决定,这种方法应该尽量避免. <id name="id" column="id"> <generator class="assigned" /> </id&g

Hibernate各种主键生成策略与配置详解【附1--&lt;generator class=&quot;foreign&quot;&gt;】

1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主键的setter方法给主键赋值,至于这个值怎么生成,完全由自己决定,这种方法应该尽量避免. <id name="id" column="id"> <generator class="assigned" /> </id&g