hibernate 联合主键生成机制(组合主键XML配置方式)
hibernate 联合主键生成机制(组合主键XML配置方式)
如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略。
具体如下:
可以使用一个组件作为一个实体类的标识符。你的组件类必须满足以下要求:
不能使用一个 IdentifierGenerator 产生组合关键字。一个应用程序必须分配它自己的标识符。
具体做法如下步骤:
1.写一个包含表中联合主键的所有字段的类,作为主键类,实例如下:
package com.seed.lee.model;
/**
* 这个类作为Person类的(组合主键)主键类
*
* @author Administrator
*
*/
public class PersonUionPKID implements java.io.Serializable {
private String firstName;
private String secondName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getSecondName() {
return secondName;
}
public void setSecondName(String secondName) {
this.secondName = secondName;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof PersonUionPKID){
PersonUionPKID pk=(PersonUionPKID)obj;
if(this.firstName.equals(pk.firstName)&&this.secondName.equals(pk.secondName)){
return true;
}
}
return false;
}
@Override
public int hashCode() {
return super.hashCode();
}
}
这里要特别注意,如hibernate API文档所述,主键类必须实现java.io.Serializable接口,而且推荐用自己的方法override equals() 和hashCode()方法,保证主键的唯一性.
2.再写一个类与表字段相当的类,这个类里面不一定要包含表主键的所有字段,实例如下:
package com.seed.lee.model;
public class Person {
PersonUionPKID uionPKID = new PersonUionPKID();
private int age;
private String sex;
private String job;
public PersonUionPKID getUionPKID() {
return uionPKID;
}
public void setUionPKID(PersonUionPKID uionPKID) {
this.uionPKID = uionPKID;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
}
3.配置hibernate配置文件,实例如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.seed.lee.model">
<class name="Person" table="person">
<composite-id name="uionPKID" class="com.seed.lee.model.PersonUionPKID">
<key-property name="secondName" />
<key-property name="firstName" />
</composite-id>
<property name="age" column="age" />
<property name="sex" length="2" />
<property name="job" length="50" />
</class>
</hibernate-mapping>
4.不要忘记在hibernate配置文件中引用映射文件。
<mapping resource="com/seed/lee/model/Person.hbm.xml" />
具体参考hibernate3 API文档中的 “组件作为联合标识符(Components as composite identifiers)”说明。
hibernate 联合主键生成机制(组合主键XML配置方式)的更多相关文章
- hibernate主键生成机制与save返回
主键生成机制为assigned时,save之后通过get得不到id(主键),使用identity可以. hibernate主键生成机制1) assigned主键由外部程序负责生成,无需Hibernat ...
- hibernarte主键生成机制
1. 主键(id)生成策略 1) assigned 主键由外部程序负责生成,在 save() 之前指定. 2) hilo 通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源 ...
- Hibernate的increment主键生成机制带来的问题
最近给学校做的系统,总出现主键插入冲突的问题.主键是通过hibernate自动生成的,设置increment属性,总出现Duplicate entry的错误.搜到解决方案如下: 在网站运行在apach ...
- Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...
- hibernate 注解 主键生成策略
一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue ...
- hibernate的主键生成策略
一共是13种,其中包括native native: 对于 oracle 采用 Sequence 方式,对于MySQL 和 SQL Server 采用identity(自增主键生成机制),native就 ...
- Hibernate各种主键生成策略2
先来看看主键映射的标签: <id (1)name="propertyName" (2)column="column_name" (3)type=& ...
- 基于按annotation的hibernate主键生成策略
基于按annotation的hibernate主键生成策略 博客分类: Hibernate HibernateJavaJPAOracleMySQL 这里讨论代理主键,业务主键(比如说复合键等)这里不 ...
- jpa基于按annotation的hibernate主键生成策略
JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar下载 一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hib ...
随机推荐
- 关于不同进制数之间转换的数学推导【Written By KillerLegend】
关于不同进制数之间转换的数学推导 涉及范围:正整数范围内二进制(Binary),八进制(Octonary),十进制(Decimal),十六进制(hexadecimal)之间的转换 数的进制有多种,比如 ...
- JQuery解析JSon
JsonCreatet.ashx页面 JSonAnalysis.aspx测试页面 一般处理程序中使用Newtonsoft.Json来序列化json 页面使用Jquery 来解析Json数据 Jquer ...
- WPF 一个弧形手势提示动画
这是一个操作提示动画,一个小手在屏幕上按照一个弧形来回运动 <Window x:Class="LZRichMediaWall.MainWindow" xmlns=" ...
- The difference between Union & Union All in SQL Server/pOSTGRESQL
Following is test in SQL Server: USE [TestDB] CREATE TABLE [dbo].[UserInfoTest02]( [number] [bigint] ...
- 转:一份基础的嵌入式Linux工程师笔试题
一. 填空题: 1. 一些Linux命令,显示文件,拷贝,删除 Ls cp rm 2. do……while和while……do有什么区别? 3. Linux系统下.ko文件是什么文件?.so文件是什么 ...
- Go在linux下的安装
在Ubuntu.Debian 或者 Linux Mint上安装Go语言 下面是在基于Debian的发行版上使用apt-get来安装Go语言和它的开发工具. $ sudo apt-get install ...
- iOS常见问题(1)
一.storyboard连线问题 产生原因:将与storyboard关联的属性删除了,但是storyboard中还保持之前所关联的属性. 解决: 1.点击view controller 2.点击这排最 ...
- mysql数据库备份及恢复命令mysqldump,source的用法
还原一个数据库:mysql -h localhost -u root -p123456 www<c:/www.sql 备份一个数据库:mysqldump -h localhost -u root ...
- mysql数据恢复
[1] 当数据库被删除后的恢复方法 首先建立一个测试用的数据库. mysql -u root -p123123 ← 用root登录到MySQL服务器 Enter password: ← ...
- 虚拟机移动后重启网络时提示Device does not seem to be present
Wmware虚拟机硬盘文件位置移动之后,重新引入到Wmware workStation中, 通过命令ifconfig...没有看到eth0..然后重启网卡 #service network resta ...