`

Hibernate 关联关系中的OneToMany 和ManyToOne

阅读更多

集合类型中的OneToMany

@Entity public class City {
    @OneToMany(mappedBy="city")
    public List<Street> getStreets() {
        return streets;
    }
...
}

注:这里OneToMany采用mappedBy方式,表面由子表维护关联关系,也就是说,在加载子表的某条记录时,主表的这个实体Bean也会相应的加载。但反过来,如果加载主表,此时主表中的集合不会加载。

注:默认的加载方式为fetch=FetchType.LAZY

如果关联关系中设置加载方式为立即加载,即:

@Entity public class City {
    @OneToMany(mappedBy="city",fetch=FetchType.EAGER)
    public List<Street> getStreets() {
        return streets;
    }
...
}

此时注意结果集会有重复记录(根据子表中相应记录个数决定多少重复)
如:

主表有如下记录:


子表:

此时如果查询主表,list中有8个实体Bean:

实例如下:

主表:

@Entity
@Table(name = "test_hdr")
public class TmTestTableHdrImpl implements TmTestTableHdr {

.............

   @OneToMany(mappedBy="_header")
    private Set<TmTestTableDtlImpl> _details;

}

子表:

@Entity
@Table(name="test_dtl")
public class TmTestTableDtlImpl implements TmTestTableDtl {

.............

    @ManyToOne
    @JoinColumn(name="test_hdr_id",insertable=false,updatable=false)
    private TmTestTableHdrImpl _header;

}

测试:

1.读子表:

        TestDtlPK dtlPK = new TestDtlPK(testDtlId);
        TmTestTableDtl rec = genDao.read(dtlPK);

结果:

      

2.读主表:

        TestHdrPK hdrPK = new TestHdrPK(testHdrId);
        TmTestTableHdr bean = genDao.read(hdrPK);

结果:

      

如果需要让一对多这一端(即主表)维护关联关系,则需要删除mappedBy元素且加上@JoinColumn并将多对一这端的 @JoinColumn的insertable和updatable设置为false,即:

主表:

@Entity
@Table(name = "test_hdr")
public class TmTestTableHdrImpl implements TmTestTableHdr {

...............

@OneToMany

@JoinColumn(name='test_hdr_id')

private Set<TmTestTableDtlImpl> _details;

}

子表:

@Entity
@Table(name="test_dtl")
public class TmTestTableDtlImpl implements TmTestTableDtl {

.............

    @ManyToOne
    @JoinColumn(name="test_hdr_id",insertable=false,updatable=false)
    private TmTestTableHdrImpl _header;

}

分享到:
评论

相关推荐

    HIBERNATE 一对多 onetomany

    在Java持久化框架Hibernate中,"一对一"(one-to-one)和"一对多"(one-to-many)是两种常见的关联关系映射。本教程将详细讲解如何在Hibernate中实现"一对多"关联,并通过实际例子加深理解。 首先,让我们了解什么...

    Hibernate 关联关系解除

    一、Hibernate关联关系介绍 在Hibernate中,关联关系主要包括以下几种: 1. 一对一(OneToOne):一个实体对应另一个实体的唯一实例。 2. 一对多(OneToMany):一个实体可以与多个其他实体相关联。 3. 多对一...

    hibernate关联关系总结

    Hibernate关联关系是Java持久化框架Hibernate中的核心概念,它允许我们在数据库中建立对象之间的关系映射,以便在程序中操作对象时,可以自动处理与数据库的交互。本篇将深入探讨Hibernate的四种主要关联关系:一对...

    Hibernate关联关系练习【全】

    总之,Hibernate关联关系是理解其工作原理的关键,它使得Java对象和数据库记录之间的映射变得简单。通过练习,你可以掌握如何配置和使用这些关系,以及如何进行相关的查询操作,从而提升你的开发效率和代码质量。...

    hibernate关联关系实例

    以上就是关于Hibernate关联关系和HQL的基本实例。在实际开发中,这些关联关系和查询方式可以帮助我们构建灵活、可扩展的数据模型,提升代码的可读性和可维护性。在使用时,要注意合理选择关联类型,避免冗余数据,并...

    hibernate关联关系2

    总结,"hibernate关联关系2"项目旨在帮助开发者理解和掌握如何在实际应用中利用Hibernate处理数据库的一对多关联。通过这个项目,不仅可以深化对Hibernate ORM的理解,还能增强数据库操作的实践经验。

    hibernate关联关系映射

    "hibernate关联关系映射"是Hibernate的核心概念之一,它定义了如何在Java对象和数据库表之间建立关系。以下是对这个主题的详细讲解: 一、一对一关系映射(One-to-One) 一对一关系是指一个实体对应另一个实体的...

    hibernate各种常用关联关系的基本配置

    本篇文章将深入探讨Hibernate中常见的几种关联关系及其基本配置。 一、一对一(OneToOne)关联 在一对一关联中,一个实体对象只对应数据库中的一个记录。配置方式通常通过`@OneToOne`注解实现,可以设置`mappedBy`...

    Hibernate关联关系疑问

    以上是关于Hibernate关联关系的一些基本概念和使用技巧,深入理解和应用这些知识能够帮助开发者更高效地使用Hibernate进行数据库操作。如果你在实践中遇到了具体的问题,可以参考相关文档、教程或社区讨论来获取更...

    Hibernate关联关系总结

    本篇文章将深入探讨Hibernate中的三种主要关联关系:一对一、一对多和多对多。 **一对一关联(One-to-One)** 一对一关联在现实生活中很常见,例如一个人只有一个身份证。在Hibernate中,这种关联可以通过`@...

    Hibernate关联关系的CRUD和集合映射(annotation)

    ### Hibernate关联关系 关联关系是指在Java对象与数据库表之间建立的连接。主要有以下几种类型: 1. **一对一(OneToOne)**:一个实体对应表中的唯一一行数据。可以通过`@OneToOne`注解来定义,可以设置`fetch`...

    注解配置 javabean hibernate 关联关系

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

    hibernate关联映射实例

    本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中至关重要的概念。 1. **一对多关联映射**: 在现实世界中,一个实体可能会与多个其他实体相关联,...

    hibernate关联关系多对一实例

    在Java的持久化框架Hibernate中,"多对一"关联关系是对象关系映射(ORM)中的一个重要概念。这种关联关系意味着在一个实体类中,一个或多个实例可以与另一个实体类的一个实例相关联。例如,我们可以想象一个班级...

    Hibernate_关联关系映射配置

    本教程将详细讲解Hibernate中的关联关系映射配置,帮助你理解和掌握如何在Hibernate中设置不同类型的关联。 一、一对一(One-to-One)关联 在现实世界中,两个实体之间可能存在一对一的关系,例如一个人只有一个...

    基于注解的关联关系Hibernate

    在这个“基于注解的关联关系Hibernate”的主题中,我们将深入探讨如何使用Hibernate的注解来配置不同类型的关联关系,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-...

    hibernate关联关系

    综上所述,本教程涵盖了Hibernate关联关系的基础知识,包括1对1、一对多和多对多的实现,以及如何在关联关系中进行增删改查操作。结合MySQL数据表文件,初学者可以更好地理解这些概念并应用于实际项目中。在实践中...

    Hibernate注解 关联关系映射注解.docx

    举个例子,假设我们有一个学生实体类(Student)和一个班级实体类(Class),在Class中我们可以声明一个`@OneToMany(mappedBy = "class")`的List,这表示学生的班级属性(如`class`)将负责维护关联关系。...

    hibernate 关联例子

    在Java的持久化框架Hibernate中,关联映射是核心概念之一,它允许对象之间的关系在数据库层面得以体现。本文将详细解析四种基本的关联类型:一对一(OneToOne)、多对多(ManyToMany)、一对多(OneToMany)和多对一...

    Hibernate教程15_关联关系中的CRUD Cascade_Fetch

    标题"Hibernate教程15_关联关系中的CRUD Cascade_Fetch"主要关注两个核心概念:关联关系和它们在创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作中的级联(Cascade)以及懒加载和立即加载(Fetch...

Global site tag (gtag.js) - Google Analytics