程序员人生 网站导航

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

栏目:php教程时间:2015-07-29 08:22:53
接上文《持久化API(JPA)系列(7)实体关系映照(ORM)之单表映照@IdClass》

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

上文是通过@IdClass援用外部主键,联合主键也能够采取嵌入式主键替换。


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

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

主键类必须满足:

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

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

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

 

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.并分别添加1个无参和有参的构造函数,来常见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.首先构造1个主键对象Family2PK
2.后调用find()方法根据该主键对象进行查询

同上文:FamilyDAO.java

 5)测试:客户端调用

同上文:Family2DAOClient.java

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

总结

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




------分隔线----------------------------
------分隔线----------------------------

最新技术推荐