`
endual
  • 浏览: 3544800 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

@OneToMany and @OneToOne

    博客分类:
  • JPA
 
阅读更多

@OneToMany and @OneToOne

@OneToMany

默认情况下,JPA 为具有一对多多重性的多值关联定义一个 OneToMany 映射。

使用 @OneToMany 批注:

将获取类型配置为 LAZY

由于所使用的 Collection 不是使用一般参数定义的,因此配置关联的目标实体

配置必须层叠到关联目标的操作:例如,如果删除了拥有实体,则确保还删除关联的目标

配置持续性提供程序对单向一对多关系使用的连接表(请参阅 @JoinTable)的详细信息

表 1-29 列出了此批注的属性。有关更多详细信息,请参阅 API

表 1-29 @OneToMany 属性




cascade

可选


默认值:CascadeType 的空数组。

默认情况下,JPA 不会将任何持续性操作层叠到关联的目标。

如果希望某些或所有持续性操作层叠到关联的目标,请将 cascade 设置为一个或多个 CascadeType 实例,其中包括:

ALL - 针对拥有实体执行的任何持续性操作均层叠到关联的目标。

MERGE - 如果合并了拥有实体,则将 merge 层叠到关联的目标。

PERSIST - 如果持久保存拥有实体,则将 persist 层叠到关联的目标。

REFRESH - 如果刷新了拥有实体,则 refresh 为关联的层叠目标。

REMOVE - 如果删除了拥有实体,则还删除关联的目标。

fetch

可选

默认值:FetchType.EAGER。

默认情况下,JPA 持续性提供程序使用获取类型 EAGER:它要求持续性提供程序运行时必须急性获取数据。

如果这不适合于应用程序或特定的持久字段,请将 fetch 设置为 FetchType.LAZY:它提示持续性提供程序在首次访问数据(如果可以)时应惰性获取数据。

mappedBy

可选


默认值:如果关系是单向的,则该持续性提供程序确定拥有该关系的字段。

如果关系是双向的,则将关联相反(非拥有)方上的 mappedBy 元素设置为拥有此关系的字段或属性的名称(如示例 1-62 所示)。

targetEntity

可选


默认值:使用一般参数定义的 Collection 的参数化类型。

默认情况下,如果使用通过一般参数定义的 Collection,则持续性提供程序从被引用的对象类型推断出关联的目标实体。

如果 Collection 不使用一般参数,则必须指定作为关联目标的实体类:将关联拥有方上的 targetEntity 元素设置为作为关系目标的实体的 Class。


示例 1-61 和示例 1-62 显示了如何使用此批注在使用一般参数的 Customer(被拥有方)和 Order(拥有方)之间配置一个一对多映射。

示例 1-61 @OneToMany - 使用一般参数的 Customer 类

@Entity
public class Customer implements Serializable {
...
@OneToMany(cascade=ALL, mappedBy="customer")
public Set<Order> getOrders() { 
return orders; 
}
...
}

示例 1-62 @ManyToOne - 使用一般参数的 Order 类

@Entity
public class Customer implements Serializable {
...
@ManyToOne
@JoinColumn(name="CUST_ID", nullable=false)
public Customer getCustomer() {
return customer;
}
...

}

 

@OneToOne

默认情况下,JPA 为指向另一个具有一对一多重性的实体的单值关联定义一个 OneToOne 映射,并从被引用的对象类型推断出关联的目标实体。

使用 @OneToOne 批注:

将获取类型配置为 LAZY

如果空值不适合于应用程序,则将映射配置为禁止空值(针对非基元类型)

配置关联的目标实体(如果无法从被引用的对象类型推断出它)

配置必须层叠到关联目标的操作:例如,如果删除了拥有实体,则确保还删除关联的目标

表 1-30 列出了此批注的属性。有关更多详细信息,请参阅 API

表 1-30 @OneToOne 属性




cascade

可选


默认值:空 CascadeType 数组。

默认情况下,JPA 不会将任何持续性操作层叠到关联的目标。

如果希望某些或所有持续性操作层叠到关联的目标,请将 cascade 设置为一个或多个 CascadeType 实例,其中包括:

ALL - 针对拥有实体执行的任何持续性操作均层叠到关联的目标。

MERGE - 如果合并了拥有实体,则将 merge 层叠到关联的目标。

PERSIST - 如果持久保存拥有实体,则将 persist 层叠到关联的目标。

REFRESH - 如果刷新了拥有实体,则 refresh 为关联的层叠目标。

REMOVE - 如果删除了拥有实体,则还删除关联的目标。

fetch

可选

默认值:FetchType.EAGER。

默认情况下,JPA 持续性提供程序使用获取类型 EAGER:它要求持续性提供程序运行时必须急性获取数据。

如果这不适合于应用程序或特定的持久字段,请将 fetch 设置为 FetchType.LAZY:它提示持续性提供程序在首次访问数据(如果可以)时应惰性获取数据。

mappedBy

可选

默认值:JPA 持续性提供程序从被引用的对象类型推断出关联的目标实体

如果持续性提供程序无法推断关联的目标实体,则将关联的相反(非拥有)方上的 mappedBy 元素设置为拥有此关系的字段或属性的 String 名称(如示例 1-64)所示。

optional

可选

默认值:true。

默认情况下,JPA 持续性提供程序假设所有(非基元)字段和属性的值可以为空。

如果这并不适合于您的应用程序,请将 optional 设置为 false。

targetEntity

可选


默认值:JPA 持续性提供程序从被引用的对象类型推断出关联的目标实体

如果持续性提供程序无法推断出目标实体的类型,则将关联的拥有方上的 targetEntity 元素设置为作为关系目标的实体的 Class。


示例 1-63 和示例 1-64 显示了如何使用此批注在 Customer(拥有方)和 CustomerRecord(被拥有方)之间配置一个一对一映射。

示例 1-63 @OneToOne - Customer 类

@Entity
public class Customer implements Serializable {
...
@OneToOne(optional=false)
@JoinColumn(name="CUSTREC_ID", unique=true, nullable=false, updatable=false)
public CustomerRecord getCustomerRecord() { 
return customerRecord; 
}
...
}

示例 1-64 @OneToOne - CustomerRecord 类

@Entity
public class CustomerRecord implements Serializable {
...
@OneToOne(optional=false, mappedBy="customerRecord")
public Customer getCustomer() {
return customer;
}
...

}

 

@ManyToOne

默认情况下,JPA 为指向具有多对一多重性的其他实体类的单值关联自动定义一个 ManyToOne 映射。

使用 @ManyToOne 批注:

将获取类型配置为 LAZY

如果空值不适合于应用程序,则将映射配置为禁止空值(针对非基元类型)

配置关联的目标实体(如果无法从被引用的对象类型推断出它)

配置必须层叠到关联目标的操作:例如,如果删除了拥有实体,则确保还删除关联的目标

表 1-23 列出了此批注的属性。有关更多详细信息,请参阅 API

表 1-23 @ManyToOne 属性




cascade

可选


默认值:CascadeType 的空数组。

默认情况下,JPA 不会将任何持续性操作层叠到关联的目标。

如果希望某些或所有持续性操作层叠到关联的目标,请将 cascade 设置为一个或多个 CascadeType 实例,其中包括:

ALL — 针对拥有实体执行的任何持续性操作均层叠到关联的目标。

MERGE — 如果合并了拥有实体,则将 merge 层叠到关联的目标。

PERSIST — 如果持久保存拥有实体,则将 persist 层叠到关联的目标。

REFRESH — 如果刷新了拥有实体,则 refresh 为关联的层叠目标。

REMOVE — 如果删除了拥有实体,则还删除关联的目标。

fetch

可选


默认值:FetchType.EAGER。

默认情况下,JPA 持续性提供程序使用获取类型 EAGER:这将要求持续性提供程序运行时必须迫切获取数据。

如果这不适合于应用程序或特定的持久字段,请将 fetch 设置为 FetchType.LAZY:这将提示持续性提供程序在首次访问数据(如果可以)时应不急于获取数据。

optional

可选


默认值:true。

默认情况下,JPA 持续性提供程序假设所有(非基元)字段和属性的值可以为空。

如果这并不适合于您的应用程序,请将 optional 设置为 false。

targetEntity

可选


默认值:JPA 持续性提供程序从被引用的对象类型推断出关联的目标实体

如果持续性提供程序无法推断出目标实体的类型,则将关联拥有方上的 targetEntity 元素设置为作为关系目标的实体的 Class。


示例 1-49 显示了如何使用此批注在使用一般参数的 Customer(被拥有方)和 Order(拥有方)之间配置一个多对一映射。

示例 1-49 @ManyToOne

@Entity
public class Order implements Serializable {
...
@ManyToOne(optional=false)
@JoinColumn(name="CUST_ID", nullable=false, updatable=false)
public Customer getCustomer() {
return customer;
}
...
}
分享到:
评论

相关推荐

    Hibernate的一对一,一对多,多对多映射

    在Hibernate中,可以通过`@OneToOne`注解来实现。以下是一个简单的例子: ```java @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // ... @OneToOne...

    spring data jpa

    例如,`@ManyToOne` 表示多对一的关系,`@OneToMany` 表示一对多的关系,`@OneToOne` 表示一对一关系,`@ManyToMany` 表示多对多关系。 ```java @Entity public class User { @Id @GeneratedValue(strategy = ...

    Hibernate双向关联代码示例

    在代码中,我们通常在父类中添加一个子类集合的属性,并使用`@OneToMany`注解标记。例如: ```java @Entity public class Parent { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long ...

    hibernate annotations 3.4.0.GA API

    Hibernate提供懒加载机制,通过@ManyToOne、@OneToOne、@OneToMany和@ManyToMany注解的fetch属性,可以配置为延迟加载或立即加载。同时,@Cascade注解可以定义级联操作,如保存、删除时对关联对象的操作。 7. **...

    Hibernate annotation

    1. @OneToOne:一对一关系,可以使用@JoinColumn或@MapsId来指定关联字段。 2. @OneToMany:一对多关系,可设置fetch属性控制加载策略,如LAZY(延迟加载)和EAGER(立即加载)。 3. @ManyToOne:多对一关系,通常...

    hibernate关系映射

    在 Hibernate 中,通常通过 `@OneToMany` 或 `@ManyToOne` 注解来实现。 ##### 示例代码 ```java // Department.java @Entity public class Department { @Id private Long id; @OneToMany(mappedBy = ...

    hibernate_annotations API中文

    Hibernate支持多种关系映射,如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。例如,一个用户可以有多个订单,可以这样映射: ```java @OneToMany(mappedBy = "user") ...

    hibernate_annotations.pdf

    - **@OneToMany、@ManyToOne、@OneToOne、@ManyToMany**:分别表示一对一、一对多、多对一、多对多的关联关系。 #### 三、版本号解析 - **Version:3.2.0CR1**:表示此文档或代码适用于Hibernate 3.2.0 CR1版。CR1...

    注解配置 javabean hibernate 关联关系

    关联关系是数据库中的表与表之间的一种联系,比如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。在Hibernate中,我们可以通过以下注解来配置关联关系: 1. `@OneToOne`: ...

    Springboot+JPA(demo)

    在JPA中,我们可以使用`@OneToMany`, `@ManyToOne`, `@OneToOne` 或 `@ManyToMany` 注解来定义实体之间的关联。例如,如果有`Order`和`Product`两个实体,我们可以在`Order`实体中添加`@OneToMany`注解来表示订单...

    hibernate动态生成表结构

    在Hibernate中,表与表之间的关系可以通过一对多(OneToMany)、多对一(ManyToOne)、一对一(OneToOne)、多对多(ManyToMany)四种方式表示。以下是一些基本示例: 1. 一对一关系:使用`@OneToOne`注解,可以...

    D_JPA_02_简单实体映射和API.zip

    3. **关系映射**:JPA也支持一对多(@OneToMany)、多对一(@ManyToOne)、一对一(@OneToOne)和多对多(@ManyToMany)的关系映射。通过使用这些注解,可以在实体之间建立关联。例如,一个用户可能有多个订单: ``...

    hibernate实例(一对多,多对一)

    在Hibernate中,我们可以通过在映射文件或注解中定义`@OneToOne`来实现这种关系。关联可以是单向或双向的,且可以设置外键约束以确保数据一致性。 **一对多关联(One-to-Many)** 在一对多关联中,一个实体可以与...

    hibernate注解详解

    - **一对多关联**:`@OneToMany` - **多对一关联**:`@ManyToOne` - **多对多关联**:`@ManyToMany` 每个关联注解都有各自的属性,如mappedBy、cascade、fetch等,用于控制关联的细节。 7. **懒加载和立即加载...

    JPA基础语法资料--JPA_Basic

    通过`@OneToOne`、`@OneToMany`、`@ManyToOne`、`@ManyToMany`等注解实现。例如,一个用户可能有多个订单: ```java @Entity public class User { // ... @OneToMany(mappedBy = "user") private List&lt;Order&gt; ...

    jpa的详细java资料

    4. **实体关系**:实体之间可以通过多种关系进行关联,比如一对一 (`@OneToOne`)、一对多 (`@OneToMany`)、多对一 (`@ManyToOne`) 和多对多 (`@ManyToMany`)。 5. **示例**:以下是一个简单的 `Customer` 实体类...

    Hibernate distribution and annotation

    6. **@OneToMany, @ManyToOne, @OneToOne, @ManyToMany**: 用于定义关联关系,如一对一、一对多、多对多等。 7. **@Temporal**: 用于日期和时间字段的特殊处理,如TIMESTAMP、DATE或TIME。 8. **@Inheritance**...

    三大框架的注解演示案例

    此外,`@OneToMany`、`@ManyToOne`、`@OneToOne`和`@ManyToMany`处理关联关系。 在实际案例中,开发者可能还会涉及到Spring Boot,它是Spring框架的简化版本,大量内置了常用配置。通过`@SpringBootApplication`,...

    hibernate

    映射还包括主键定义(@Id)、关系映射(@OneToOne、@OneToMany、@ManyToOne、@ManyToMany)等。 ### Hibernate复合组件 复合组件(Composite Element)是指一个实体类中包含其他实体类的复杂结构。在数据库中,这...

Global site tag (gtag.js) - Google Analytics