有两个实体Order和Customer,一个用户可以有多个订单,一个订单属于一个用户,所以Customer与Order是一对多的关系,那么在Order实体里可以有一个到Customer的引用customer,同时在Customer里有一个Order实体的集合orders。如果在只是如下这样写:
public class Order {
@id
private long id;
@ManyToOne
private Customer customer;
public void setId(long id) {
this.id = id;
}
public long getId() {
return this.id;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public Customer getCustomer() {
return this.customer;
}
}
public class Customer{
@id
private long id;
@OneToMany
private Set<Order> orders;
public void setId(long id) {
this.id = id;
}
public long getId() {
return this.id;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
public Set<Order> getOrders() {
return this.orders;
}
}
那么系统可能会自动生成一张Customer_Order关联表,可是事实上我们不需要这样的表,因为通过 Select order from Order order where order.customer.id=:id, 就可以找到某个Customer的Orders,而不需要另建一张表。要想去掉这个自动生成的表,要这样写:
public class Order {
@id
private long id;
@ManyToOne
@JoinColumn(name="customer", nullable=false)
private Customer customer;
public void setId(long id) {
this.id = id;
}
public long getId() {
return this.id;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public Customer getCustomer() {
return this.customer;
}
}
public class Customer{
@id
private long id;
@OneToMany(mappedBy="customer")
private Set<Order> orders;
public void setId(long id) {
this.id = id;
}
public long getId() {
return this.id;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
public Set<Order> getOrders() {
return this.orders;
}
}
多出一个mappedBy和JoinColumn, 就是告诉JPA实现者,orders是通过order里的customer映射来的,每次查找orders通过Order里的customer联接。这样就不会生成Customer_Order关联表了
分享到:
相关推荐
在Java世界中,Java Persistence API (JPA) 是一种用于管理关系数据库的规范,它使得开发者可以使用面向对象的方式来操作数据库。"JPA_OneToMany"是JPA中的一个关键概念,涉及实体之间的关联关系,特别是在处理一对...
在本篇《JPA学习总结(三)--JPAOneToMany双向关联》中,我们将深入探讨Java Persistence API (JPA)中的OneToMany关系映射,这是一种在数据库表之间建立一对多关联的方式。JPA作为ORM(对象关系映射)框架,允许我们...
- "JPA_由数据库生成JavaBean.docx"可能介绍了如何从数据库反向工程生成Java实体类。 - "JPA之OneToMany和ManyToOne处理"的MHT文件深入讨论了这两种关联的处理方法。 - "SpringHibernateJPA0300_BoneCP.rar"可能...
标题提到的"多表查询的使用方式"是JPA中的一个重要概念,尤其是对于复杂业务场景,多表关联查询是必不可少的。JPA提供了多种方式进行多表查询,主要包括以下几种: 1. **JOIN查询**:在JPA中,你可以使用`@...
**JPA(Java Persistence API)**是Java平台上的一个标准,用于管理关系数据库中的对象-关系映射(ORM)。在本课程中,我们将深入探讨JPA中的一些关键关系映射类型,包括`@ManyToMany`、`@OneToMany`等,以及它们的...
这里的`GenerationType.IDENTITY`表示由数据库自动生成主键。 3. **属性映射(Field Mapping)**: JPA使用`@Column`注解将实体类的字段映射到数据库表的列。例如: ```java @Entity public class User { @Id @...
总的来说,"jpa-day3-onetomany.zip"压缩包中的内容将帮助你理解和掌握Spring Data JPA中的一对多关系和多表联查操作。通过学习和实践这些示例,你可以更加熟练地在Java应用中处理数据库的关联关系,提高开发效率。
JPA(Java Persistence API)是Java企业版5(Java EE 5)的一部分,提供了一个对象关系映射方法,使得开发者可以使用声明方式定义如何将Java对象映射到关系数据库表。在JPA中,批注是一种使用元数据修饰Java源代码的...
1. **Identity(标识符)**:由数据库自动生成,如MySQL的`AUTO_INCREMENT`。 2. **Sequence(序列)**:通过数据库序列生成主键,如Oracle的`SEQUENCE`。 3. **Table(表)**:通过独立的主键生成表来生成主键。 ...
在JPA中,实体(Entity)是数据库表的映射,使用`@Entity`注解标识。每个实体都有一个主键,通常用`@Id`注解标注。如果需要复合主键,可以使用`@IdClass`或`@EmbeddedId`。另外,`@GeneratedValue`用于指定主键生成...
JPA提供了多种主键生成策略,如IDENTITY(自动增长)、SEQUENCE(序列)、TABLE(表生成)等。 3.4 字段、添加字段、添加表关联 `@Column`注解用于定义字段的数据库列映射,包括长度、是否可为空等属性。`@...
它提供了一种对象关系映射方法,允许您以标准、可移植的方式声明性地定义如何将Java对象映射到关系数据库表,不仅在Java EE 5应用服务器内部,而且在Java标准版(Java SE)5应用程序外部都能工作。 在使用TopLink ...
- 使用`@OneToMany`注解表示一对多关系,通常还需要使用`@JoinColumn`或`@JoinTable`来指定关联方式。 - 延迟加载(`@Lazy`)是处理一对多关联时的一个重要特性,有助于优化性能。 - **多对多关联**: - 多对多关系...
3. `@GeneratedValue`: 用于主键生成策略,可以设置为`GenerationType.IDENTITY`(数据库自动增长)、`GenerationType.SEQUENCE`(序列)、`GenerationType.TABLE`(全局表)等。 4. `@Temporal`: 对于日期和时间...
在 JPA 中,使用 `@OneToMany` 注解来定义这种关系,并通过 `@JoinColumn` 指定关联字段。 **示例代码:** ```java @OneToMany @JoinColumn(name = "CUST_ID") private Set<Contact> contactList; ``` 这里,`...
`@OneToMany`注解用来表示这种关系,同时可能需要使用`@JoinColumn`来指定外键列。 6. **lib**:这个文件夹包含了运行这些项目所需的库文件,主要是JPA供应商的实现和其他依赖的jar包。在实际使用时,需要将这些库...
@OneToOne、@OneToMany、@ManyToOne:这些注解分别对应于一对一、一对多和多对一的数据库表关系。 关于MAVEN打包的问题,当pom.xml文件不存在或无法激活时,通常需要在pom.xml中添加maven-compiler-plugin插件,并...
`strategy`可选值包括AUTO、IDENTITY、SEQUENCE和TABLE,分别代表ORM框架自动选择、基于数据库的Identity字段、基于Sequence字段和基于额外表生成主键。`generator`用来指定主键生成器,比如在Hibernate中可以指定...
如果不使用此批注,JPA提供程序会认为类是非持久化的。 2. **数据库模式属性批注**: - `@Table`:用于指定实体对应的数据库表名。 - `@Column`:定义实体属性与数据库列的映射。 - `@JoinColumn`:在一对一和多...
在Java世界中,Java Persistence API(JPA)是用于对象关系映射(ORM)的一种标准框架,它允许开发者将数据库操作与业务逻辑紧密结合,而无需编写大量的SQL代码。本篇文章将深入探讨如何在JPA中映射关联和实现继承。...