hibernate 关于主键
2014-06-02 17:46
169 查看
本文为北京尚学堂hibernate视频的学习笔记
1在xml中定义单个主键生成策略
1.1通过xml
<id name="id" type="long" > <generator class="identity"/> </id>其中class有多种类型 但实际上我们只需记得四种
native 自动选择数据库
identity 对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。 返回的标识符是long, short 或者int类型的。
sequence 在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。
uuid: 使用一个128bit的字符串来标识主键
通过简单的比较 相信大家都明白如果是数字型的主键就选择native 它会设置为对应数据库的自增形式
1.2通过annotation
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) public Long getId() { ... }
其中strategy可以有以下四种形式
AUTO - 可以是identity column类型,或者sequence类型或者table类型,取决于不同的底层数据库.
TABLE - 使用表保存id值
IDENTITY - identity column
SEQUENCE - sequence
tabel那个说实话 我自己也没有看懂
通过上面四句话 相信大家都知道 该使用那种了吧
2定义联合主键
2.1使用xml
package com.bjsxt.hibernate; public class Student { private StudentPK pk; private int age; private String sex; //省略get/set方法 }
package com.bjsxt.hibernate; public class StudentPK implements java.io.Serializable{ private int id; private String name; @Override public boolean equals(Object o) { if(o instanceof StudentPK) { StudentPK pk = (StudentPK)o; if(this.id == pk.getId() && this.name.equals(pk.getName())) { return true; } } return false; } @Override public int hashCode() { return this.name.hashCode(); } }每一个学生是以StudentPk作为主键 同时得记住主健类得复写equals和hashcode方法 同时实现serializable接口
<class name="com.bjsxt.hibernate.Student"> <composite-id name="pk" class="com.bjsxt.hibernate.StudentPK"> <key-property name="id"></key-property> <key-property name="name"></key-property> </composite-id> <property name="age" /> <property name="sex" /> <property name="good" type="yes_no"></property> </class>我想我依然不用说太多了
2.2使用annotation
2.2.1方法一将组件类注解为@Embeddable,并将组件的属性注解为@Id如上例中 在studentpk类上@embeddable
在student中的getpkStudent方法上@id
2.2.1方法二将组件的属性注解为@EmbeddedId
在上例中只用在student中的getPKStudent()方法上加上@embeddedid
2.2.1方法三将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id
如上例中在student类上加上
@IdClass(StudentPK.class)
在student类中getid和getname两个方法上都加上@id
主要使用的也是第二种方法
相关文章推荐
- 关于Hibernate复合主键的问题
- 关于Hibernate的复合主键查询
- Hibernate 中关于主键生成策略之联合主键
- 关于hibernate对实体类主键生成策略的注解
- 关于hibernate非主键多对一关联
- 关于hibernate产生的自增主键
- 关于hibernate反向生成实体类的问题-没有主键的表映射
- 关于Hibernate的hilo主键生成器(另附继承映射)
- 关于hibernate反向生成后,所对应非主键配置
- 关于Hibernate的oracle主键id生成策略uuid、native和sequence
- 关于hibernate产生的自增主键
- 关于Hibernate的oracle主键id生成策略uuid、native和sequence
- 关于Hibernate修改数据库主键
- hibernate 关于主键
- 关于Hibernate 复合主键 简单使用
- hibernate 中关于自增主键
- 关于Hibernate使用组合主键时,组合主键中有些字段为null时的解决方法
- 关于Hibernate的oracle主键id生成策略uuid、native和sequence
- 关于hibernate查询视图时,相同主键的两条记录映射问题【已解决】
- 关于hibernate注解组合主键使用