Use automate id by hibernate:

If you want the tables' id be created automation. How to do it?

When use XML file, Just use the generator:

 <id name="id"> 

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

  </id> 

Now id which is named id will be created automation. The class native can automatically identify Database you use.

You can also use uuid or hilo to get a single number. uuid can generate a number unique all the universe.

When use annotation, Just use the @GeneratedValue under @Id if you want to automate id.

Use @GeneratedValue by default. All database can automate id.

When the Database which suport identity. @GeneratedValue(strategy = GenerationType.IDENTITY).

When use database which suport sequence. @GeneratedValue(strategy = GenerationType.SEQUENCE)

The best way to let your data and program can be used anywhere is use like this:

 @TableGenerator

@TableGenerator(
ame="DOCTOR_GEN",
table="GENERATOR_TABLE",
pkColumnName = "pk_key",
valueColumnName = "hi",
pkColumnValue="doctor",
allocationSize=1 ) /*Use TableGenerator * Create a table which is named GENERATOR_TABLE and includes two column * Column "Key" and column "hi" * set a value in column Key which is named teacher * then the table which is named teacher create id will get it form GENERATOR_TABLE * at the last the value of column hi do add by allocationSize * */

TableGennerator create a table to save number for other tables;

Use  @GeneratedValue(strategy=GenerationType.TABLE, generator="DOCTOR_GEN") to use Generator table.

Sometimes we need more than one column to be primary key.

So we Create a class to provide object which object package primary key.

 public class ProgramerPK implements Serializable{
private int id;
private String sid;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
} @Override
public boolean equals(Object o){
if(o instanceof ProgramerPK){
ProgramerPK sp = (ProgramerPK)o;
if(this.id == sp.getId() && this.sid == sp.getSid()){
return true;
}
}
return false;
} @Override
public int hashCode(){
return this.sid.hashCode();
}
}

This class has two elements named id and sid. But we must implement the Serializable interface.

The Serializable interface can make this class be serialized.

Then we must also to override the equals method and hashCode method.

The equals which is overrode can assert objects real equal or not.

The hashCode which is overrode can get real hashCode for object.

And the hashCode will be used for serializeble.

If use XML file to configure hibernate do like this:

<composite-id class="StudentPK" name="stp">
<key-property name="id"></key-property>
<key-property name="sid"></key-property>
</composite-id>

If use annotation just write like this:

 @EmbeddedId
//use many of columns be ID
public ProgramerPK getPp() {
return pp;
}

The source code : https://github.com/andy201401/hibernate_learn/tree/master/hibernat_0400_ID

Hibernate Id Generator and Primary Key的更多相关文章

  1. 1503 - A PRIMARY KEY must include all columns in the table's partitioning function

    1503 - A PRIMARY KEY must include all columns in the table's partitioning function 错误的原因:表的主键字段必须包含分 ...

  2. Mysql中的primary key 与auto_increment

    mysql> create table cc(id int auto_increment); ERROR (): Incorrect table definition; there can be ...

  3. postgresql数据库primary key约束/not null约束/unique约束及default值的添加与删除、列的新增/删除/重命名/数据类型的更改

    如果在建表时没有加primary key约束.not null约束.unique约束.default值,而是创建完表之后在某个字段添加的话 1.primary key约束的添加与删除 给red_pac ...

  4. 在Hibernate中配置Hilo进行数据绑定测试时出错:org.hibernate.MappingException: Could not instantiate id generator

    在进行学习具体类单表继承时使用hilo类型时总是在调度过程中提示如下信息,无法通过.留下记录备查. 在网上找相关信息, 未解决,详细如下: org.hibernate.MappingException ...

  5. 解决mybatis generator警告Cannot obtain primary key information from the database, generated objects may be incomplete

    使用 mybatis generator 生成pojo.dao.mapper时 经常出现 Cannot obtain primary key information from the database ...

  6. Hibernate —— ID的各种生成器(转)

    Hibernate中,<id>元素下的可选<generator>子元素是一个Java类的名字,用来为该持久化类的实例生成惟一标示,所有的生成器都实现net.sf.hiberna ...

  7. Hibernate的generator属性之意义

    Hibernate的generator属性之意义 本文讲述Hibernate的generator属性的意义.Generator属性有7种class,本文简略描述了这7种class的意义和用法. Hib ...

  8. (转)Sqlite中INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用

    原文:http://www.cnblogs.com/peida/archive/2008/11/29/1343832.html Sqlite中INTEGER PRIMARY KEY AUTOINCRE ...

  9. mysql中key 、primary key 、unique key 与index区别

    一.key与primary key区别 CREATE TABLE wh_logrecord ( logrecord_id ) NOT NULL auto_increment, ) default NU ...

随机推荐

  1. css 清除浮动最佳方法!

    .clear:after{content:'\0020';display:block;height:0;clear:both} .clear{*zoom:1}

  2. myql数据库在cmd下,中文乱码的问题原因

    使用navicat把数据导入数据库,这些数据都是中文,导入成功,显式也正常,但是在mysql cmd下都是乱码.检查了我的mysql配置,字符编码都是utf8,包括navicat连接时候也设置过是ut ...

  3. [NOIP2015]信息传递

    [NOIP2015]信息传递[问题描述]有

  4. My安卓知识2--使用listview绑定sqlite中的数据

    我想在我的安卓项目中实现一个这样的功能,读取sqlite数据库中的数据并显示到某个页面的listview控件中. 首先,我建立了一个Service类,来实现对数据库的各种操作,然后在这个类中添加对数据 ...

  5. Linux多线程服务端编程一些总结

    能接触这本书是因为上一个项目是用c++开发基于Linux的消息服务器,公司没有使用第三方的网络库,卷起袖子就开撸了.个人因为从业经验较短,主 要负责的是业务方面的编码.本着兴趣自己找了这本书.拿到书就 ...

  6. c#获取ip的方法cdn加速获取真实ip方法

    服务端://方法一HttpContext.Current.Request.UserHostAddress; //方法二HttpContext.Current.Request.ServerVariabl ...

  7. aa2

    option = { series : [ { name: 'Map', type: 'map', mapLocation: { x : 'left', y : 'top', height : 500 ...

  8. .Net中的加密解密

    返回博客列表 转 .Net中的加密解密 李朝强 发布时间: 2015/11/23 12:55 阅读: 33 收藏: 3 点赞: 0 评论: 0 在一些比较重要的应用场景中,通过网络传递数据需要进行加密 ...

  9. linux命令连接远程服务器

    ssh root@IP    ***连接远程ip cd 路径           ***进入指定路径 ll                   ***查看当前文件 ll -a             ...

  10. html5实现摇一摇功能

    原理:使用DeviceMotion实现,关于DeviceMotion介绍可以查看 https://developer.mozilla.org/en-US/docs/Web/Reference/Even ...