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

接上文《持久化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,接下来通过截图对比一下吧:

时间: 2024-10-31 07:43:54

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

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

通过以前的文章,我们了解到@Table.@Column.@Id实现了单表的映射,并且书剑有一个@Id指定的唯一字段.有时我们的数据表也许是有多个主键联合组成的,因此对于单表映射的主键,还可以进行如下两种联合主键映射. 联合主键:使用@IdClass指定外部主键 联合主键:使用@EmbeddedId嵌入外部主键 下面通过实例来看这两种主键的开发方法. Demo:设计一个家庭表Family的数据结构 ==================================================

持久化API(JPA)系列(六)实体关系映射(ORM)之映射类型

ORM实体关系映射,即将数据库中的数据表及表之间的关系,通过实体Bean及实体Bean之间的关系表现出来,实现通过操作实体Bean来操作数据库. ORM(Object-Relation-Map),其中Object表示实体Bean,Relation表示数据表,Map表示实体Bean与数据表的映射. 由于EJB3中的实体Bean采用JPA框架,因此这里的ORM就是指JPA映射.它的作用也类似于Hibernate.iBATIS.JDO.TopLink等持久化层框架中的实体关系映射. 根据表与表之间的关

Spring Data Jpa系列教程--------实体解析和关联关系

Spring Data Jpa是基于HIbernate开发的,所以建立实体建的实体和映射关系需要好好好的去了解一下,本文有以下内容,实体管理器介绍,实体与数据库表的映射介绍,关联关系(一对多,多对多)介绍,SpringDataJpa应用分析 ------实体管理器   实体管理器EntityManager是实体与数据库的桥梁(和事务一起发挥作用),相当于Hibenrtae中的session,Mybatis中的sqlSession.使用方法放个小例子吧 @PersistenceContext pr

hibernate单表映射

什么是Hibernate? ORM:object relationship mapping对象关系映射 hibernate是java领域的一款开源的ORM框架技术. hibernate是对jdbc进行了非常轻量级的对象封装. 1.开发工具:Eclipse Standard Kepler Hibernate Tools for eclipse Plugins Hibernate Tools是由JBoss推出的一个Eclipse综合开发工具插件,该插件可以简化ORM框架Hibernate,以及JBo

Hibernate初探之单表映射

http://www.imooc.com/video/7816 1.什么是ORM?为什么使用Hibernate? 对象关系映射:为了少写和底层数据库相关的sql语句,方便程序的维护.修改,提高跨平台性和可扩展性.Hibernate是Java领域内的一款技术成熟稳定的ORM框架 2.Hibernate开发的基本步骤? (1)编写配置文档hibernate.cfg.xml (2)编写实体类.注意:每一个实体类都要与数据库中的一张表一一对应,实体类的编写要遵循JavaBean的要求. (3)生成对应实

Hibernate初探之单表映射——创建对象-关系映射文件

编写一个Hibernate例子 第三步:创建对象-关系映射文件 以下是具体实现步骤: 找到我们要持久化的学生类Sudents 生成对象-关系映射文档Students.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourcefor

Hibernate初探之单表映射——通过Hibernate API编写访问数据库的代码

编写一个Hibernate例子 第五步:通过Hibernate API编写访问数据库的代码 初始化方法要实现以下功能: 原文地址:https://www.cnblogs.com/songsongblue/p/9523201.html

Hibernate初探之单表映射——创建持久化类

编写第一个Hibernate例子 第二步:创建持久化类(持久化类的设计原则要遵循javabeans的设计原则) javabeans的设计原则: 1.公有的类2.提供公有的不带参数的默认的构造方法3.属性私有 4.属性setter/getter封装 新建一个Students类(持久化类) import java.util.Date; //学生类 public class Students { // 1.公有的类 // 2.提供公有的不带参数的默认的构造方法 // 3.属性私有 // 4.属性set

Hibernate单表映射学习笔记之一——hibernalnate开发环境配置

1.什么是ORM? Object/Relationship Mapping:对象/关系映射 2.写SQL语句不好之处: (1)不同数据库使用的SQL语法不同(PL/SQL.T/SQL) (2)同样的功能在不同的数据库中有不同的实现方式(分页SQL) (3)过分依赖SQL语句对程序的移植和拓展不利 3.Hibernate (1)ORM框架技术 (2)对JDBC进行了非常轻量的对象封装 4.其他ORM框架技术 (1)Mybatis(前身为iBatis) (2)Toplink(现为Oracle As