文档章节

Hibernate主键生成策略

李茂冉
 李茂冉
发布于 2016/05/11 11:58
字数 467
阅读 12
收藏 0
点赞 2
评论 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
东城
高级程序员

暂无相关文章

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 22分钟前 ⋅ 0

MySQL 内核深度优化

MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务...

java高级架构牛人 ⋅ 44分钟前 ⋅ 0

用户登录信息-钉子效果(基于jquery2.0)

本js效果使用jquery2.0,清晰的分解用户登录信息的(钉子效果),该效果直接用在作者网站(www.phpkhbd.com)上。 里面的难点有:定时器,延时。 大致效果如下: 一开始: 鼠标放上去的时候:...

宁哥实战课堂 ⋅ 46分钟前 ⋅ 0

解决yum安装报错Protected multilib versions

使用yum安装报错Protected multilib versions原因是因为多个库不能共存,不过更新的话也并不行,但是可以在安装命令后面加上如下一段命令: --setopt=protected_multilib=false 案例: 比如需...

北岩 ⋅ 57分钟前 ⋅ 0

为什么要学习Typescript???

简单来说 目前的typescript就是未来的javascript 为什么?? 这要从ECMA-262标准的第4版说起 对了 我们说的ES5 其实是ECMAScript3.1这个替代性建议被扶正了而已... 那么 第4版标准是什么? 看看...

hang1989 ⋅ 今天 ⋅ 0

linux安装ipfs

一、下载ipfs # cd /usr/local/ipfs/ # wget https://dist.ipfs.io/go-ipfs/v0.4.15/go-ipfs_v0.4.15_linux-amd64.tar.gz # tar -zxvf go-ipfs_v0.4.15_linux-amd64.tar.gz 二、安装ipfs # ......

八戒八戒八戒 ⋅ 今天 ⋅ 0

jvm程序执行慢诊断手册

生产环境最多的几种事故之一就是程序执行慢,如果是web服务的话,表现就是响应时间长。本文分享,从业多年形成的排查守则。 诊断步骤 系统资源查看 首先是系统资源查看,而且必须是在第一步。...

xpbob ⋅ 今天 ⋅ 0

YII2 advanced 高级版本项目搭建-添加API应用以及多应用

一、YII安裝 安裝yii可以用composer安裝,也可以在yii中文社区下载归档文件安装 composer安装就不介绍了,因为要安装composer,比较麻烦,当然安装了composer是最好的,以后安装yii的插件要用...

botkenni ⋅ 今天 ⋅ 0

在jdk1.8的环境下模拟永久代内存溢出

相信不少小伙伴在看深入理解Java虚拟机的时候,作者给我们举例一个demo来发生PermGen space 1、通过List不断添加String.intern(); 2、通过设置对应的-XX:PermSize与-XX:MaxPermSize(更快看到...

虾几把写 ⋅ 今天 ⋅ 0

开发OpenDaylight组件的完整流程

在前面介绍学习了OpenDaylight的几个重要模块后,这里再来介绍下完整开发一个模块的过程。 OSGI的bundles提供被其他OSGI组件调用的服务。这个教程中展示的是Data Packet Service去解析数据包...

wangxuwei ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部