• Hibernate ID生成策略


    我们在创建表的时候都有一个唯一id,但是我们想自动的跨平台的生成id,hibernate帮我们实现了方法。

    常用的UUID,native:

    方式一:

    使用xml:Student.hbm.xml

    <?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>
        <class name="com.xxc.model.Student" table="student"><!-- 表名 -->
            <id name="id">
                <generator class="native"></generator>  <!--native可以改成UUID区别自己查-->
            </id><!-- column对应数据库表里面的字段 -->
            <property name="name" ></property>
            <property name="age" ></property>
        </class>
        
    </hibernate-mapping>

    这样我们在网数据库中存数据的时候就不需要s.setId();hibernate自动帮我们创建

    方式二:

    使用annotation:

    我们就不需要.hbm.xml配置文件了,直接在实体类中添加@GeneratedValuepackage com.xxc.model;

    import java.util.Date;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="teacher")
    public class Teacher {
        private int id;
        
        @Id
        @GeneratedValue 
      //我们可以自己制定生成策略:@GeneratedValue(strategy=GenerationType.IDENTITY),这种方法SqlServer,mysql能用,但是oracle不能用,因为他用的是sequence
      //在oracle中我门换成@GeneratedValue(strategy=GenerationType.SEQUENCE)就可以了
      public int getId() { return id; } public void setId(int id) { this.id = id; } }

    这样生成id,我们如果有几个表的话,几个表就会公用同一个id生成器,如果我们想不一样,那就看下面

    import java.util.Date;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="teacher")
    @SequenceGenerator(name="teacherGen",sequenceName="teacherGen_DB")//name是指这个生成器的名字,sequenceName是指生产数据库后squence的名字
    public class Teacher {
        private int id;
        
        @Id
        //@GeneratedValue 
       @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="teacherGen")
      //我们可以自己制定生成策略:@GeneratedValue(strategy=GenerationType.IDENTITY),这种方法SqlServer,mysql能用,但是oracle不能用,因为他用的是sequence   //在oracle中我门换成@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="teacherGen")就可以了   public int getId() { return id; } public void setId(int id) { this.id = id; } }
  • 相关阅读:
    初学者之 Git 和 Github
    80端口与8080端口是两种不同的端口吗?他们到底有什么区别和联系?
    redis 基础(一) 初步了解redis
    spring 基础(四)浏览器跨域访问+拦截器(Interceptor)
    mysql商业版和社区版
    spring 基础(五) spring mvc RESTful
    解决idea控制台打印乱码问题
    springBoot 基础-拓展(二) 记录一些常用的配置文件
    SpringBoot 基础(零) SpringBoot和Spring
    springBoot 基础-拓展(一) spring-boot-starter
  • 原文地址:https://www.cnblogs.com/alex-xxc/p/9756423.html
Copyright © 2020-2023  润新知