Hibernate06_ID生成策略

来源:互联网 发布:为知笔记导出 苹果 编辑:程序博客网 时间:2024/05/22 05:05

第一种native , id自增, 相当于primary key auto_increment;

Book实体类

package com.chb.model;public class Book {    private int id;    private String name;    private double price;    public Book() {}    public Book(int id, String name, double price) {        super();        this.id = id;        this.name = name;        this.price = price;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }}

Book.hbm.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping        SYSTEM        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" ><!-- 映射对应的package --><hibernate-mapping package="com.chb.model">    <!-- 实体类Book与数据库中表Book_info对应 -->    <class name="Book" table="book_table">        <id name="id" column="book_id">            <!-- id主键, 设为自增 -->            <generator class="native"></generator>        </id>        <property name="name" column="book_name"></property>        <property name="price" column="book_price"></property>    </class></hibernate-mapping>

测试成功:

这里写图片描述

查看数据库, 可以发现id自动为1

这里写图片描述

二、生成策略为assign

修改Book.hbm.xml<generator class="assigned"></generator>

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping        SYSTEM        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" ><!-- 映射对应的package --><hibernate-mapping package="com.chb.model">    <!-- 实体类Book与数据库中表Book_info对应 -->    <class name="Book" table="book_table">        <id name="id" column="book_id">            <!--  id不会自动生成, 需要用户指定-->            <generator class="assigned"></generator>        </id>        <property name="name" column="book_name"></property>        <property name="price" column="book_price"></property>    </class></hibernate-mapping>

使用DROP TABLE book_table 将数据库中的book_table删除

ID生成策略改为assigned, 第一次执行,ID自动为1

再次执行测试, 报如下错误。因为id需要开发人员自己指定。

ERROR: Duplicate entry '0' for key 'PRIMARY'

三、生成策略为uuid

Book.hbm.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping        SYSTEM        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" ><!-- 映射对应的package --><hibernate-mapping package="com.chb.model">    <!-- 实体类Book与数据库中表Book_info对应 -->    <class name="Book" table="book_table">        <id name="id" column="book_id">            <!-- 会自动生成一个字符串, 主键必须为String类型  -->            <generator class="uuid"></generator>        </id>        <property name="name" column="book_name"></property>        <property name="price" column="book_price"></property>    </class></hibernate-mapping>

将Book实体类的id改为String

package com.chb.model;public class Book {    private String id;    private String name;    private double price;    public Book() {}    public Book(String id, String name, double price) {        super();        this.id = id;        this.name = name;        this.price = price;    }    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;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }}

删除数据库中的book_table

测试

这里写图片描述

原创粉丝点击