背景:ProductInfo对Brand是多对一的关系,ProductInfo对ProductType是多对一的关系
一:1:首先测试单向关联:即只在ProductInfo里添加
@ManyToOne(cascade=CascadeType.REFRESH)
public Brand getBrand() {
return brand;
}
和
@ManyToOne(cascade=CascadeType.REFRESH,optional=false)
//optional=false说明必须要有品牌属性,即这个属性必须有,不能为空
public ProductType getType() {
return type;
}
public void setType(ProductType type) {
this.type = type;
}
运行测试生成productinfo表后,属性brand,type生成对应的字段分别是brand_code和type_typeid(因为数据库里的表名是brand和producttype,brand和type是ProductInfo的属性,code,typeid分别是表brand,productytype的主键,所以默认的生成的外键字段应该是:属性名_主键名(外表的主键名)
2:做一些改变,改变如下:
@ManyToOne(cascade=CascadeType.REFRESH)
@JoinColumn(name="brandid")
public Brand getBrand() {
return brand;
}
和
@ManyToOne(cascade=CascadeType.REFRESH,optional=false)
@JoinColumn(name="typeid")
//optional=false说明必须要有品牌属性,即这个属性必须有,不能为空
public ProductType getType() {
return type;
}
public void setType(ProductType type) {
this.type = type;
}
运行生成表的测试,测试的结果是:属性brand,type生成对应的字段分别是brandid和typeid。
单向测试总结:只是在表productinfo里多了两个外键,分别参照表brand和表producttype,而在表brand和表producttype中并没有出现新增字段
二:测试双向关联
在ProductType里加入下面数据:
private Set<ProductInfo> productInfos= new HashSet<ProductInfo>();
//mappedBy="type"说明一对多的关系是靠ProductInfo里的ProductType类型的属性type来控制
//,cascade=CascadeType.REMOVE说明级联关系是删除,就是当把ProductType对象删除的时候,对应的有关系的ProductInfo对象们也被删除
@OneToMany(mappedBy="type",cascade=CascadeType.REMOVE)
public Set<ProductInfo> getProductInfos() {
return productInfos;
}
public void setProductInfos(Set<ProductInfo> productInfos) {
this.productInfos = productInfos;
}
运行测试:测试结果:表producttype没有发生任何变化,也没有添加新字段,这个是可以理解的,因为本来在ProductType里一对多的关系是由ProductInfo里的type属性来控制的。
总结可见:双线关联和单向关联在数据表层是没有区别的,只是在业务上单向关联只可以通过ProductInfo对象找到对应的ProductType对象;而双向
关联关系不仅可以通过ProductInfo对象找到对应的ProductType对象,还可以通过ProductType对象找到对应的ProductInfo对象
package com.itcast.bean.product;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.Cascade;
import com.itcast.util.Sex;
@Entity
public class ProductInfo {
private Integer id;
private Brand brand;
/**型号**/
/**产品类型**/
private ProductType type;
private Sex sexRequest = Sex.NONE;
@Id @GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@ManyToOne(cascade=CascadeType.REFRESH)
public Brand getBrand() {
return brand;
}
public void setBrand(Brand brand) {
this.brand = brand;
}
@ManyToOne(cascade=CascadeType.REFRESH,optional=false)
//optional=false说明必须要有品牌属性,即这个属性必须有,不能为空
public ProductType getType() {
return type;
}
public void setType(ProductType type) {
this.type = type;
}
@Enumerated(EnumType.STRING)@Column(length=5,nullable=false)
public Sex getSexRequest() {
return sexRequest;
}
public void setSexRequest(Sex sexRequest) {
this.sexRequest = sexRequest;
}
}
相关推荐
在Java世界中,Java Persistence API(JPA)是Oracle公司推出的用于...通过"13_传智播客JPA详解_JPA中的多对多双向关联实体定义与注解设置"的学习,开发者可以更好地应用这些概念,提升代码质量和数据库操作的灵活性。
在这个主题中,我们将深入探讨如何在JPA中定义和配置双向多对多关联实体,并通过注解进行设置。 首先,我们需要了解JPA中的几个关键注解: 1. `@Entity`:标记一个类作为JPA的实体类,使得该类可以被JPA管理并映射...
Java Persistence API(JPA)是Java...理解并熟练掌握一对一、一对多和多对多关系映射对于使用JPA进行数据库操作至关重要。在实际开发中,根据业务需求选择合适的关系映射方式,可以极大地提高开发效率和代码可维护性。
通过本教程,你可以学习到如何在JPA中设置和操作多对多双向关联,理解其背后的数据库操作,并掌握处理关联的技巧,从而更好地利用JPA进行数据持久化。在实际开发中,灵活运用这些知识能帮助你构建出更加高效和易于...
在Java Persistence API (JPA) 中,一对多关联是一种常见的关系映射,它表示一个实体可以与多个其他实体相关联。这种关联在数据库层面通常通过外键实现,而在JPA中,我们通过注解来配置这种关系。这篇博客将深入探讨...
在单向多对多关系中,一个实体可以关联多个其他实体,而这些实体并不知道这个关联。使用`@ManyToMany`注解,关联表通常由JPA自动创建,除非自定义了`@JoinTable`。 7. **双向多对多**: 双向多对多是最复杂的关系...
在Java Persistence API (JPA) 中,一对一双向关联是一种关系映射,它允许两个实体类之间存在一对一的关系,并且每个实体都能引用对方。这种关联是双向的,意味着每个实体都可以通过自己的属性访问到另一个实体。...
以上就是关于Hibernate单向多对多关联映射的基本介绍和实践。实际应用中,还需考虑性能优化、事务管理、懒加载等问题。通过不断的练习和学习,你可以更熟练地掌握这一重要功能,提升项目开发的效率和质量。
它涵盖了实体的配置、关联关系的建立、查询、持久化操作和事务管理等多个方面,对于理解JPA的多对多关联有很好的学习价值。通过这个示例,开发者可以更好地掌握JPA在处理复杂关系时的能力和灵活性。
**JPA 2 一对多双向关联关系** Java Persistence API(JPA)是Java平台上的一个标准,用于处理对象关系映射(ORM),使得开发者可以使用面向对象的方式操作数据库。在JPA中,一对多关联关系是常见的实体间关系类型...
通过`@OneToOne`注解来实现,可以是单向或双向。`@JoinColumn`用于指定外键所在的字段,`@MapsId`则表明关联对象的主键就是当前对象的主键。 2. **一对多(OneToMany)映射**:一个实体对象可以对应多个子对象。...
本文将详细介绍 JPA 中四种常见的映射关系:一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)以及多对多(Many-to-Many)。 #### 1. OneToOne 关系建立 一对一关系是指两个实体之间的关系,...
本资料“13_JPA详解_JPA中的多对多双向关联实体定义与注解设置”专注于讲解JPA如何处理多对多双向关联关系,这是数据库设计中常见的一种复杂关联类型。下面我们将详细探讨这一主题。 首先,我们需要理解多对多关联...
在Java Persistence API (JPA) 中,"单向多对一"关系是一种常见的对象关系映射(ORM)设计模式,用于表示实体之间的关联。在这个模式中,一个实体("多"端)可以引用另一个实体("一"端),但被引用的实体并不持有对...
本资料包"10_JPA详解_JPA中的一对多双向关联与级联操作.zip"聚焦于JPA中的一个重要概念——一对多双向关联及其级联操作。以下是对这一主题的详细阐述。 **一对多关联** 在关系数据库设计中,一对多关联是最常见的...
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第10讲 JPA中的一对多双向关联与级联操作.avi
本教程将深入探讨JPA中的一对多双向关联及级联操作,这对于理解和使用JPA进行复杂数据模型管理至关重要。 首先,我们来理解一下一对多关联。在数据库设计中,一对多关联是指一个实体(表)可以与多个其他实体相关联...
在本教程中,我们将深入探讨JPA中的多对多双向关联及其各项操作。 ### 1. 多对多关联基础 在关系型数据库中,多对多关联通常通过中间表来实现,而JPA提供了一种声明式的方式来处理这种关联。在双向关联中,两个...