一对一(One-To-One)
使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键(注意要模拟一对一关联必须在外键列上添加唯一约束),(3).通过关联表来保存两个实体之间的连接关系(要模拟一对一关联必须在每一个外键上添加唯一约束)。
1.共享主键的一对一关联映射:
@Entity
@Table(name="Test_Body")
public class Body {
private Integer id;
private Heart heart;
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@OneToOne
@PrimaryKeyJoinColumn
public Heart getHeart() {
return heart;
}
public void setHeart(Heart heart) {
this.heart = heart;
}
}
@Entity
@Table(name="Test_Heart")
public class Heart {
private Integer id;
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
通过@PrimaryKeyJoinColumn批注定义了一对一关联
2.使用外键进行实体一对一关联:
@Entity
@Table(name="Test_Trousers")
public class Trousers {
@Id
public Integer id;
@OneToOne
@JoinColumn(name = "zip_id")
public TrousersZip zip;
}
@Entity
@Table(name="Test_TrousersZip")
public class TrousersZip {
@Id
public Integer id;
@OneToOne(mappedBy = "zip")
public Trousers trousers;
}
上面的例子是指Trousers通过Trousers的外键列zip_id和TrousersZip关联,@JoinColumn批注定义了联接列,该批注和@Column批注有点类似,但是多了一个名为referencedColumnName的参数。该参数定义了所关联目标实体中的联接列,注意,当referencedColumnName关联到非主键列的时候,关联的目标类必须实现Serializable,还要注意的是所映像的属性对应单个列(否则映射无效)
一对一关联可能是双向的,在双向关联中,有且仅有一端作为主体(owner)端存在:主体端负责维护联接列(即更新),对于不需要维护这种关系的从表则通过mappedNy属性进行声明。mappedBy的值指向主体的关联属性。例子中,mappedBy的值为zip。最后,不必也不能再在被关联端(ownedside)定义联接列了,因为已经在主体端声明了。
如果在主体没有声明@JoinColumn,系统自动进行处理:在主表(owner table)中将创建联接列,列名为:主体的关联属性名+下划线+被关联端的主键列名。上面的例子中是zip_id,因为Trousers中的关联属性名为zip,TrousersZip的主键是id。
3.通过关联表定义一对一关联
@Entity
@Table(name="Test_People")
public class People {
@Id
public Integer id;
@OneToOne
@JoinTable(name ="TestPeoplePassports",
joinColumns = @JoinColumn(name="perple_fk"),
inverseJoinColumns = @JoinColumn(name="passport_fk")
)
public Passport passport;
}
@Entity
@Table(name="Test_Passport")
public class Passport {
@Id
public Integer id;
@OneToOne(mappedBy = "passport")
public People people;
}
People通过名为TestPeoplePassports的关联表和Passport关联。该关联表拥有名为passport_fk的外键列,该外键指向Passport表,该信息定义为inverseJoinColoumns的属性值,而people_fk外键列指向People表,该信息定义为joinColumns的属性值。
这种关联可能是双向的,在双向关联中,有且仅有一端作为主体(owner)端存在:主体端负责维护联接列(即更新),对于不需要维护这种关系的从表则通过mappedNy属性进行声明。mappedBy的值指向主体的关联属性。例子中,mappedBy的值为passport。最后,不必也不能再在被关联端(ownedside)定义联接列了,因为已经在主体端声明了。
分享到:
相关推荐
NULL 博文链接:https://profound-accumulation.iteye.com/blog/2241894
JPA一对一,一对多,多对多关系映射,面向对象领域
JPA常用关系实现例子:一对一,一对多,多对一,多对多关系实现代码。
NULL 博文链接:https://taoistwar.iteye.com/blog/388916
11_JPA详解_JPA中的一对多延迟加载与关系维护.zip 11_JPA详解_JPA中的一对多延迟加载与关系维护.zip
11_传智播客JPA详解_JPA中的一对多延迟加载与关系维护.rar
JPA视频_映射双向一对一的关联关系 · 16. JPA视频_映射双向多对多的关联关系 · 17. JPA视频_二级缓存 · 18. JPA视频_JPQL_HelloWorld · 19. JPA视频_JPQL_查询缓存 · 20. JPA视频_JPQL_ORDER BY 和 GROUP...
为了方便广大开发朋友的需要特整理一下有关jpa映射关系,希望可以帮助到一些朋友。
这是本人观看传智的视频,整理出来的完整的源码,及学习步骤,学了总会忘记,方便今后复习。代码可以直接运行,jar包完整,资源较大,分几块分享(1-5,按照学习步骤写的)。
映射单向多对一、单向一对多、双向一对一、双向多对一和双向多对多关联关系的具体实现
单向一对一 双向一对一 单向一对多 双向一对多 双向多对一 单向多对多 双向多对多
NULL 博文链接:https://prowl.iteye.com/blog/519618
最近比较清闲,终于有空好好把传智的jpa视频整理了一些,因为每次复习都看视频比较麻烦,索性自己整理一份文档,方便查看。 针对jpa入门级概念做了解释; 有一些基本的增删改查例子,及...重点学习一对多,多对多关系;
除了对 JPA 标准的支持之外,OpenJPA 还提供了非常多的特性和工具支持让企业应用开发变得更加简单,减少开发者的工作量,包括允许数据远程传输/离线处理、数据库/对象视图统一工具、使用缓存(Cache)提升企业应用...
这是本人观看传智的视频,整理出来的完整的源码,及学习步骤,学了总会忘记,方便今后复习。代码可以直接运行,jar包完整,资源较大,分几块分享(1-5,按照学习步骤写的)。
hibernate的中关系映射分为一对一、一对多、多对一、多对多,其中有单双向之分。而一对一还有主键和外键区分。一共是九种。分别用xml配置文件和annotation实现。annotation的版本没有写测试程序,见谅。
JPA2.0 加入了大量必须的 ORM 映射增强特性,包括:支持通过使用 @ElementCollection 标注来增强 collections, maps 和 lists( 这里不是指实体之间的关联关系 ) 集合,支持 map 的单向 one-to-many 关联 (JPA1.0...
现在引入了一组全新的 API:Java Persistence API JPA 以允许开发者管理 Java EE(甚至 SE)应用程序中的关系数据 另外 Sun 声称 Java Persistence API 表现了一些 Hibernate TopLink(二者都会在稍后讨论) JDO ...
29.1主键生成策略 ...29.4 一对一关系的配置和使用 29.5 多对一和一对多关系的配置和使用 29.6 多对多的关系 29.7 把查询的多个值封装成对象 29.8 批量更新和删除 29.9 使用存储过程 29.10 实体生命周期回调方法
JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中,图 1很好地描述了JPA的结构: Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用的对象持久...