码迷,mamicode.com
首页 > Windows程序 > 详细

持久化API(JPA)系列(八)实体关系映射(ORM)之单表映射@EmbeddedId

时间:2015-04-30 18:12:55      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:idclass   embeddedid   ssh   

接上文《持久化API(JPA)系列(七)实体关系映射(ORM)之单表映射@IdClass》

本文将介绍《联合主键:使用@EmbeddedId嵌入外部主键》

上文是通过@IdClass引用外部主键,联合主键也可以采用嵌入式主键替代。


1)新建外部主键类Family2.java

设置联合主键man和woman,因此外部主键也需要定义两个相同的变量,并添加一个以两个变量为输入的构造函数,同时添加getter/setter函数。

主键类必须满足:

1.必须实现Serializable接口,必须有默认的public无参数的构造方法

2.必须覆盖equals和hashCode方法,这些要求与使用复合主键的要求相同。

将主键类使用@Embeddable标注,表示这是一个嵌入式类。

 

package com.tgb.itoo.exam.entity;

import java.io.Serializable;

import javax.persistence.Embeddable;

@SuppressWarnings("serial")
@Embeddable
public class Family2PK implements Serializable {

	private String man;//丈夫
	private String woman;//妻子

	public Family2PK() {

	}

	public Family2PK(String man, String woman) {		
		this.man = man;
		this.woman = woman;
	}

	....//同Family.java中的函数	
}

2)使用@EmbeddedId在试题Bean类Family2.java中嵌入外部主键

通过注释符来设定与表、字段的映射关系。

该类有如下特点:

1.映射的表名为family2.java,目的是与上文Demo中family.java区分

2.通过@EmbeddedId标签嵌入了外部主键Family2PK的实例id,表示被嵌入的主键变量

3.并分别添加一个无参和有参的构造函数,来常见id的实例。

4.在getMan()、setMan()、getWoman()、setWoman()函数中,分别引用id的值。

  

package com.tgb.itoo.exam.entity;

import java.io.Serializable;

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

@SuppressWarnings("serial")
@Entity
@Table(name="family2")
public class Family2 implements Serializable {

	@EmbeddedId
	private Family2PK id;//嵌入式主键	

	private String address;// 地址

	//初始化
	public Family2() {	
		this.id=new Family2PK();
	}
	
	public Family2(String man,String woman) {
		this.id=new Family2PK(man,woman);
	}
		
	@Column(name="man")
	public String getMan() {
		return this.id.getMan();
	}

	public void setMan(String man) {
		this.id.setMan(man);
	}

	@Column(name="woman")
	public String getWoman() {
		return this.id.getWoman();
	}

	public void setWoman(String woman) {
		this.id.setWoman(woman);
	}

	@Column(name="address" ,length=100)
	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

}

3)新建远程接口类Family2DAORemote.java

定义两个接口:新增、根据主键查询

同上文:FamilyDAORemote.java

4)开发实现类Family2DAO.java

1.首先构造一个主键对象Family2PK
2.后调用find()方法根据该主键对象进行查询

同上文:FamilyDAO.java

 5)测试:客户端调用

同上文:Family2DAOClient.java

============================================================================

总结

      通过两个Demo可以看出,使用@IdClass指定外部主键和使用@EmbeddedId嵌入外部主键,的主要区别在于两个文件:FamilyPK.java主键类和Family.java,接下来通过截图对比一下吧:

技术分享

技术分享


持久化API(JPA)系列(八)实体关系映射(ORM)之单表映射@EmbeddedId

标签:idclass   embeddedid   ssh   

原文地址:http://blog.csdn.net/zhaolijing2012/article/details/45396647

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!