zoukankan      html  css  js  c++  java
  • 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; } }
  • 相关阅读:
    ReactiveCocoa入门教程——第一部分【转载】
    浅谈iOS中MVVM的架构设计与团队协作【转载】
    如何使用CocoaPods安装使用及配置私有库以及管理依赖库 【原创】
    工作经验【原创】
    xcode常见报错调试【原创】
    彻底解决_OBJC_CLASS_$_某文件名", referenced from:问题(转)
    Android遇到的那些坑
    Android开发和Android Studio使用教程
    CGI是什么 搜索了这么多,大致看明白了保留下来。
    不同手机根据坐标计算控件、图片的像素,px 与 dp, sp换算公式?
  • 原文地址:https://www.cnblogs.com/alex-xxc/p/9756423.html
Copyright © 2011-2022 走看看