`
a137268431
  • 浏览: 146769 次
文章分类
社区版块
存档分类
最新评论

hibernate联合主键生成机制(annotation方式)

 
阅读更多

这里记录hibernate中组合主键的annotation方式。

hibernate-annotations说明文档中有说到组合主键使用annotation的方式实现,如下几种

下面是定义组合主键的几种语法:

1. 将组件类注解为@Embeddable,并将组件的属性注解为@Id

2. 将组件的属性注解为@EmbeddedId

3. 将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id

第一种方式实例:

1.主键类,如下

package com.seed.lee.model;

import javax.persistence.Column;
import javax.persistence.Embeddable;

/**
* 这个类作为Person类的(组合主键)主键类
*
* @author Administrator
*
*/
@Embeddable //这里就是annotation文档中所说的,将组件类注解为@Embeddable

public class PeopleUionPKID implements java.io.Serializable {

private String firstName;

private String secondName;

@Column(length=20)
public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Column(length=20)
public String getSecondName() {
return secondName;
}

public void setSecondName(String secondName) {
this.secondName = secondName;
}

@Override
public boolean equals(Object obj) {
if(obj instanceof PeopleUionPKID){
PeopleUionPKID pk=(PeopleUionPKID)obj;
if(this.firstName.equals(pk.firstName)&&this.secondName.equals(pk.secondName)){
return true;
}
}
return false;
}

@Override
public int hashCode() {
return super.hashCode();
}

}

2.与数据库表对应的类

package com.seed.lee.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Peopel {

PeopleUionPKID uionPKID = new PeopleUionPKID();

private int age;

private String sex;

private String job;

@Id //这里就是文档中所述的,并将组件的属性注解为@Id
public PeopleUionPKID getUionPKID() {
return uionPKID;
}

public void setUionPKID(PeopleUionPKID uionPKID) {
this.uionPKID = uionPKID;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Column(length=4)
public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

@Column(length=20)
public String getJob() {
return job;
}

public void setJob(String job) {
this.job = job;
}

}

说明:除了代码中标为粗体的与普通的单主键类不同之外,其他都大同小异.

第二种方式比较简单

1.主键类,这个类不需要做任何的注解

package com.seed.lee.model;

import javax.persistence.Column;

/**
* 这个类作为Person类的(组合主键)主键类
*
* @author Administrator
*
*/

public class PeopleUionPKID implements java.io.Serializable {

private String firstName;

private String secondName;

@Column(length=20)
public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Column(length=20)
public String getSecondName() {
return secondName;
}

public void setSecondName(String secondName) {
this.secondName = secondName;
}

@Override
public boolean equals(Object obj) {
if(obj instanceof PeopleUionPKID){
PeopleUionPKID pk=(PeopleUionPKID)obj;
if(this.firstName.equals(pk.firstName)&&this.secondName.equals(pk.secondName)){
return true;
}
}
return false;
}

@Override
public int hashCode() {
return super.hashCode();
}

}

2.数据表映射的类(只需要在主键类的引用中添加@EmbeddedId就可以)

package com.seed.lee.model;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Peopel {

PeopleUionPKID uionPKID = new PeopleUionPKID();

private int age;

private String sex;

private String job;

@EmbeddedId
public PeopleUionPKID getUionPKID() {
return uionPKID;
}

public void setUionPKID(PeopleUionPKID uionPKID) {
this.uionPKID = uionPKID;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Column(length=4)
public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

@Column(length=20)
public String getJob() {
return job;
}

public void setJob(String job) {
this.job = job;
}

}

第三种方式,这种方式相对麻烦一点,据说这种是符合常人的编码规范的,所以有很多人用

1. 依然需要主键类,类中不需要注解任何的属性

package com.seed.lee.model;

import javax.persistence.Column;

/**
* 这个类作为Person类的(组合主键)主键类
*
* @author Administrator
*
*/

public class PeopleUionPKID implements java.io.Serializable {

private String firstName;

private String secondName;

@Column(length=20)
public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Column(length=20)
public String getSecondName() {
return secondName;
}

public void setSecondName(String secondName) {
this.secondName = secondName;
}

@Override
public boolean equals(Object obj) {
if(obj instanceof PeopleUionPKID){
PeopleUionPKID pk=(PeopleUionPKID)obj;
if(this.firstName.equals(pk.firstName)&&this.secondName.equals(pk.secondName)){
return true;
}
}
return false;
}

@Override
public int hashCode() {
return super.hashCode();
}

}

2.数据表对应的类(这个类中需要将表的组合主键也记录成属性,并在所有的主键字段的get方法上注解@id,最后就是在类名上方注解

@IdClass(value=PeopleUionPKID.class),PeopleUionPKID就是主键类的类短名

package com.seed.lee.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;

@Entity
@IdClass(value=PeopleUionPKID.class)
public class Peopel {

// PeopleUionPKID uionPKID = new PeopleUionPKID();
private String firstName;
private String secondName;

private int age;

private String sex;

private String job;

// @EmbeddedId
// public PeopleUionPKID getUionPKID() {
// return uionPKID;
// }
//
// public void setUionPKID(PeopleUionPKID uionPKID) {
// this.uionPKID = uionPKID;
// }

public int getAge() {
return age;
}

@Id
public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

@Id
public String getSecondName() {
return secondName;
}

public void setSecondName(String secondName) {
this.secondName = secondName;
}

public void setAge(int age) {
this.age = age;
}

@Column(length=4)
public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

@Column(length=20)
public String getJob() {
return job;
}

public void setJob(String job) {
this.job = job;
}

}

分享到:
评论

相关推荐

    Hibernate笔记 马士兵

    第1课 课程内容 6 第2课 Hibernate UML图 6 第3课 风格 7 第4课 资源 7 第5课 环境准备 7 第6课 第一个示例Hibernate HelloWorld 7 ...2、annotation方式 27 第14课 Hibernate核心开发接口(重点) 29 ........

    Hibernate 中文 html 帮助文档

    触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对一...

    最全Hibernate 参考文档

    触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (optional) 5.1.9. property 5.1.10. 多对一...

    hibernate 体系结构与配置 参考文档(html)

    触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对...

    Hibernate教程

    触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. 鉴别器(discriminator) 6.1.7. 版本(version)(可选) 6.1.8. timestamp (optional) 6.1.9. property 6.1.10. 多...

    Hibernate注释大全收藏

    @Id 注解可将实体Bean中某个属性定义为主键,使用@GenerateValue注解可以定义该标识符的生成策略。 • AUTO - 可以是 identity column, sequence 或者 table 类型,取决于不同底层的数据库 • TABLE - 使用table...

    Hibernate3的帮助文档

    触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. 鉴别器(discriminator) 6.1.7. 版本(version)(可选) 6.1.8. timestamp (optional) 6.1.9. property 6.1.10. 多...

    hibernate3.04中文文档.chm

    触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. 鉴别器(discriminator) 6.1.7. 版本(version)(可选) 6.1.8. timestamp (optional) 6.1.9. property 6.1.10. ...

    Hibernate3+中文参考文档

    触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (optional) 5.1.9. property 5.1.10. 多对一...

    hibernate 框架详解

    触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. 鉴别器(discriminator) 6.1.7. 版本(version)(可选) 6.1.8. timestamp (optional) 6.1.9. property 6.1.10. ...

    Hibernate参考文档

    触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对一...

    JAVA上百实例源码以及开源项目

     通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 ...

    JAVA上百实例源码以及开源项目源代码

    设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节 通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后...

    springmybatis

    mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis SqlSessionDaoSupport的使用附代码下载 转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门...

Global site tag (gtag.js) - Google Analytics