单向N-N关联必须使用连接表。
Company实体:
package com.ydoing.hibernate5;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name = "company_inf")
public class Company {
@Id
@Column(name = "company_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
@ManyToMany(targetEntity = Product.class, cascade = CascadeType.ALL)
@JoinTable(name = "company_product", joinColumns = @JoinColumn(name = "company_id", referencedColumnName = "company_id"), inverseJoinColumns = @JoinColumn(name = "product_id", referencedColumnName = "product_id"))
private Set<Product> products = new HashSet<>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Product> getProducts() {
return products;
}
public void setProducts(Set<Product> products) {
this.products = products;
}
}
Product实体:
package com.ydoing.hibernate5;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "product_inf")
public class Product {
@Id
@Column(name = "product_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Console输出:
Hibernate:
insert
into
company_inf
(name)
values
(?)
Hibernate:
select
last_insert_id()
Hibernate:
insert
into
product_inf
(name)
values
(?)
Hibernate:
select
last_insert_id()
Hibernate:
insert
into
product_inf
(name)
values
(?)
Hibernate:
select
last_insert_id()
Hibernate:
insert
into
company_product
(company_id, product_id)
values
(?, ?)
Hibernate:
insert
into
company_product
(company_id, product_id)
values
(?, ?)
从输出不难看出,Hibernate创建了连接表company_product。
数据库表:
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
“Hibernate基于外键的一对多单向关联”这个标题指的是在Java持久化框架Hibernate中,如何通过外键实现一个实体类(如订单)与另一个实体类(如商品)之间的一对多关系,并且这种关联是单向的,即从订单端可以访问到...
本篇文章将详细讲解Hibernate的两种单向关联关系:单向1-N关联和单向N-1关联。 1. **单向1-N关联** 在这种关联关系中,一个实体(1端)可以与多个其他实体(N端)相关联。在Hibernate中,通常在1端的实体类中引入...
本文将深入探讨Hibernate的关联映射学习,包括一对多、多对一、一对一等多种关系映射的方式。 首先,我们来看一下“一对多”(One-to-Many)的映射关系。在Hibernate中,这种关系通常用在一个实体可以拥有多个子...
在本篇讨论中,我们将深入探讨Hibernate如何实现多对多单向关联。 一、多对多关联的配置 在Hibernate中,多对多关联通常通过`@ManyToMany`注解来定义。这个注解可以用在实体类的属性上,表示该属性与另一个实体类...
本教程将深入探讨Hibernate中的四种主要数据关联:一对一(11)、多对一(M1)、一对多(1N)和多对多(MN)的关系映射。 1. **一对一(11)关联**: 在现实世界中,有些实体间存在一对一的关系,例如一个人只有一...
8. **单向与双向映射**:一对多关系可以是单向的,即只有“1”端知道“N”端;也可以是双向的,双方都有对对方的引用。双向映射需要注意维护关系的同步,防止数据不一致。 在实践中,我们可以使用Hibernate的API来...
本文主要探讨的是Hibernate中的两种关联关系:多对一单向关联和多对一双向关联。通过理解这两种关联方式,我们可以更好地设计和实现复杂的数据库模型。 首先,我们来看**多对一单向关联**。这种关联意味着一个实体...
单向N-N关联与1-N关联类似,但在控制端增加一个Set类型的属性,但没有`unique="true"`属性,因为多对多关系允许重复的关联。 【Hibernate批量处理】 批量处理能提高数据操作效率,减少数据库交互次数。在Hibernate...
本篇文章将深入探讨Hibernate中一对多单向关联映射的概念、配置以及其实现方法。 一、概念理解 一对多关联意味着在数据库中,一个表(实体)的一条记录可以对应另一个表(实体)的多条记录。例如,一个学生可以有多...
1. **单向N-1关联(无连接表)** 在这种关联中,一个Person对象拥有一个Address对象。在Person类中添加`private Address address`属性,并在`person.hbm.xml`中配置`<many-to-one>`元素,如`<many-to-one name=...
关联通常包括以下几种类型:单向`one-to-many`关联、双向`one-to-many`关联、`many-to-one`关联以及`one-to-one`关联。 ##### 单向`one-to-many`关联 - **定义**:单向`one-to-many`关联是指一个实体可以拥有多个...
**标题详解:**“Hibernate教程04_关系映射之一对一单向外键关联” 在Hibernate框架中,关系映射是数据库表之间的关联在对象模型中的体现。本教程重点讲解了一对一(One-to-One)单向外键关联的实现方法。在数据库...
单向关联映射指的是在一个方向上定义关联,而另一个方向不定义任何关联的情况。这通常适用于某些情况下一方对另一方有依赖,但另一方并不关心这种依赖的情况。 ###### 2.1.1 多对一 (N-1) - **基于FK**:在这种...
在`Department`类中,由于是单向关联,所以不需要在`Department`上做任何特殊标注。外键`department_id`会在`Employee`表中生成,关联到`Department`的`id`。 `@ManyToOne`注解的参数解释: - `fetch`:默认是`...
1. **外键约束**:在一对一关联中,通常由一方持有外键,可以是双向关联,也可以是单向关联。 2. **唯一性**:在数据库中,一对一关联的两个表的关联字段必须具有唯一性约束。 3. **性能考虑**:根据业务需求选择...
- **多对多关联映射单向数据存储**:演示如何保存多对多的关系。 - **多对多关联映射单向数据加载**:演示如何加载多对多的数据。 #### 多对多关联映射双向(many-to-many) 这部分内容可能涉及多对多关联映射的...
### Hibernate的N对N的关系映射详解 #### 一、概念理解 在关系型数据库设计中,实体之间的关联关系主要有三种类型:一对一(One-to-One)、一对多(One-to-Many)以及多对多(Many-to-Many)。而Hibernate作为一种...
- 查询:HQL(Hibernate Query Language)是Hibernate的查询语言,可以避免N+1问题,通过一次性加载所有数据或使用`Criteria` API进行分页查询。 总的来说,Hibernate通过简化数据库操作,提高了开发效率。理解并...
本知识点将深入讲解Hibernate中的一对一(OneToOne)连接,特别是单向关联的实现。 在数据库设计中,一对一关联是指两个实体之间存在唯一对应的关系,例如一个人可能只有一个身份证,或者一个账户只有一个用户信息...