hibernate 联合主键生成机制(组合主键XML配置方式)
2015-03-11 18:01
393 查看
hibernate 联合主键生成机制(组合主键XML配置方式)
如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略。具体如下:
可以使用一个组件作为一个实体类的标识符。你的组件类必须满足以下要求:
它必须实现
java.io.Serializable接口
它必须重新实现
equals()和
hashCode()方法,始终和组合关键字在数据库中的概念保持一致
注意:在 Hibernate3 中,第二个要求并非是 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 联合主键生成机制(组合主键XML配置方式)
- hibernate联合主键生成机制(annotation方式)
- hibernate联合主键生成机制(annotation方式)
- Hibernate 联合主键生成机制 xml
- hibernate联合主键生成机制(annotation方式)
- hibernate联合主键生成机制(annotation方式)
- hibernate 联合主键应用及配置用xml方式实现
- hibernate联合主键生成机制(annotation方式)
- hibernate联合主键生成机制(annotation方式)
- Hibernate学习_003_Hibernate中常用的主键生成策略总结(上)XML方式
- SS6.2_Hibernate_Hibernate_IdStrategyAnnotation 主键生成策略uuid Annotation注解的配置方式
- 1.9 ID生成策略(xml方式的联合主键)
- nate联合主键生成机制(annotation方式)
- Hibernate4主键生成策略(xml方式)
- SS5.1_Hibernate_IdStrategyXML ~ SS5.5_Hibernate_IdStrategyXML 主键生成策略 XML映射文件的方式
- Hibernate联合主键怎样在xml中配置
- hibernate联合主键生成策略以及一对多配置
- hibernate 在不使用xml配置的方式生成数据库表的方法
- 【hibernate框架】如何配置联合主键-XML与Annotation样例剖析