文档章节

Hibernate主键生成策略

李茂冉
 李茂冉
发布于 2016/05/11 11:58
字数 467
阅读 12
收藏 0

1. ID生成策略

1.1.         XML方式

Xml生成Id

         Generator

         常用4个:

Native-int  identity (sqlserver,mysql)-int  sequence(oracle)-int    uuid-string

Increment(mysql) -int

<?xml version="1.0" encoding="utf-8"?>

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

<hibernate-mapping package="com.hiber">

    <class name="Student" table="student" >

       <id name="id">

           <!-- mysql中的auto_increment -->

<!--          <generator class="identity"/>-->

      

           <!-- oracle中的sequence -->

<!--          <generator class="sequence" />-->

      

           <!-- uuid唯一的值32 -->

           <generator class="uuid" />

      

           <!-- native(所有数据库的)自动递增 -->

<!--          <generator class="native" />-->

       </id>

       <property name="name" length="10"></property>

       <property name="sex" length="2" ></property>

       <property name="age" length="3" ></property>

    </class>

</hibernate-mapping>

 

 

1.2.         注解方式 Annotition

  例子:

@Id

  @GeneratedValue //此处默认为native

  public int getId() {

     return id;

  }

 

@Id

  @GeneratedValue(strategy=GenerationType.IDENTITY) //此处为 IDENTITY

  public int getId() {

     return id;

  }

 

 

1.3 联合主键的设置

         1.@Embeddable @Id

         2.@EmbeddedID

         3.@Id@IdClass

private Student_id_PK pk;

@EmbeddedId //联合主键的设置

  public Student_id_PK getPk() {

     return pk;

  }

例子:

package com.hiber;

import javax.persistence.EmbeddedId;

import javax.persistence.Entity;

@Entity

public class Student_id {

    private Student_id_PK pk;

    private String sex;

    @EmbeddedId   //联合主键的设置

    public Student_id_PK getPk() {

       return pk;

    }

    public void setPk(Student_id_PK pk) {

       this.pk = pk;

    }

    public String getSex() {

       return sex;

    }

    public void setSex(String sex) {

       this.sex = sex;

    }

    public int getAge() {

       return age;

    }

    public void setAge(int age) {

       this.age = age;

    }

    private int age;

   

}

 

package com.hiber;

//把当前类序列化

public class Student_id_PK implements java.io.Serializable{

    //联合主键

    private int id;

    private String name;

    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;

    }

   

    @Override

    public boolean equals(Object obj) {

       if(obj instanceof Student_id_PK){

           Student_id_PK p = (Student_id_PK)obj;

           if(p.id==this.id && p.name.equals(this.name)){

              return true;

           }

       }

       return false;

    }

    @Override

    public int hashCode() {

       return this.name.hashCode();

    }

}

 

package com.hiber;

import org.hibernate.HibernateException;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.AnnotationConfiguration;

import org.hibernate.cfg.Configuration;

import org.hibernate.classic.Session;

 

public class Student_id_Test {

         public static void main(String[] args) {

                  //创建连接

                  //建立Configuration

                  Configuration cfg = null;

                  //xml方式

                  //cfg = new Configuration();

                 

                  //Annotition方式

                  cfg = new AnnotationConfiguration();

                 

                  cfg.configure();

                  //打开SessionFactory

                  SessionFactory sf = cfg.buildSessionFactory();

                  //创建Session

                  Session session = sf.openSession();

                 

                 

                  Student_id_PK pk=new Student_id_PK();

                  pk.setId(1);

                  pk.setName("_11");

                  Student_id stu = new Student_id();

                  stu.setPk(pk);

                  stu.setSex("");

                  stu.setAge(19);

                 

                  //打开事务

                  session.beginTransaction();

                  //保存对象

                  try{

                          session.save(stu);

                          //提交事务

                          session.getTransaction().commit();

                          System.out.println("保存数据OK");

                  }catch(HibernateException e){

                          //回滚事务

                          session.getTransaction().rollback();

                          System.out.println("保存数据失败!");

                  }finally{

                          //关闭连接

                          session.close();

                  }

         }

}

 

 

© 著作权归作者所有

共有 人打赏支持
李茂冉
粉丝 5
博文 103
码字总数 59256
作品 0
东城
高级程序员

暂无文章

原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
52
0
awk命令扩展使用操作

awk 中使用外部shell变量 示例1 [root@centos01 t1022]# A=888[root@centos01 t1022]# echo "" | awk -v GET_A=$A '{print GET_A}'888[root@centos01 t1022]# echo "aaaaaaaaaaaaa" | aw......

野雪球
今天
45
0
深入解析MySQL视图VIEW

Q:什么是视图?视图是干什么用的? A:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。   通过视图,可以展现基表的部分数据;...

IT--小哥
今天
50
0
虚拟机学习之二:垃圾收集器和内存分配策略

1.对象是否可回收 1.1引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能...

贾峰uk
今天
50
0
smart-doc功能使用介绍

smart-doc从8月份底开始开源发布到目前为止已经迭代了几个版本。在这里非常感谢那些敢于用smart-doc去做尝试并积极提出建议的社区用户。因此决定在本博客中重要说明下smart-doc的功能,包括使...

上官胡闹
昨天
50
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部