`

OneToOne 、OneToMany 、 ManyToMany

阅读更多
OneToOne   OneToMany   ManyToMany



@ManyToOne   默认fetch=FetchType.enger
@OneToMany   默认fetch=FetchType.Lazy

重要:
双向关系:一定分别在两个类里面设“双向关联”即(假如dish和Sort双向关系:sort里面设:OneToMany(mappedBy="sort")    dish里面设:@ManyToOne)
双向关联:一定要设   XXToXX(mappedBy="")  便于表之间数据一致



一、联合主键
@Entity
class Customer {
   @EmbeddedId CustomerId id;
   boolean preferredCustomer;
}

@Embeddable
class CustomerId implements Serializable {
   @OneToOne
   @JoinColumns({
      @JoinColumn(name="userfirstname_fk", referencedColumnName="firstName"),
      @JoinColumn(name="userlastname_fk", referencedColumnName="lastName")
   }) 
   User user;
   String customerNumber;

   //implements equals and hashCode
}

@Entity 
class User {
   @EmbeddedId UserId id;
   Integer age;
}

@Embeddable
class UserId implements Serializable {
   String firstName;
   String lastName;


   //implements equals and hashCode
}

<class name="Customer">
   <composite-id name="id" class="CustomerId">
      <key-property name="firstName" column="userfirstname_fk"/>
      <key-property name="lastName" column="userfirstname_fk"/>
      <key-property name="customerNumber"/>
   </composite-id>

   <property name="preferredCustomer"/>

   <many-to-one name="user">
      <column name="userfirstname_fk" updatable="false" insertable="false"/>
      <column name="userlastname_fk" updatable="false" insertable="false"/>
   </many-to-one>
</class>

<class name="User">
   <composite-id name="id" class="UserId">
      <key-property name="firstName"/>
      <key-property name="lastName"/>
   </composite-id>

   <property name="age"/>
</class>



二、one-To-many单向关联
public class Parent {
    @Id
    @GeneratedValue
    private long id;

    @OneToMany
    private Set<Child> children;

    // getter/setter
    ...
}


public class Child {
   @Id
   @GeneratedValue
   private long id;
   private String name;

   
   // getter/setter
   ...
}


<hibernate-mapping>

    <class name="Parent">
        <id name="id">
            <generator class="sequence"/>
        </id>
        <set name="children">
            <key column="parent_id"/>
            <one-to-many class="Child"/>
        </set>
    </class>

    <class name="Child">
        <id name="id">
            <generator class="sequence"/>
        </id>
        <property name="name"/>
    </class>

</hibernate-mapping>

create table parent ( id bigint not null primary key )
create table child ( id bigint not null primary key, name varchar(255), parent_id bigint )
alter table child add constraint childfk0 (parent_id) references parent






三、one-To-many 双向关联如果父亲是必须的,那么就可以使用双向 one-to-many 的关联了
public class Parent {
    @Id
    @GeneratedValue
    private long id;

    @OneToMany(mappedBy="parent")
    private Set<Child> children;

    // getter/setter
    ...
}


public class Child {
   @Id
   @GeneratedValue
   private long id;

   private String name;
 
   @ManyToOne
   @JoinColumn(name="parent_id")//与上面的OneToMany(mappedBy="parent")对应
   private Parent parent;

   
   // getter/setter
   ...
}


<hibernate-mapping>

    <class name="Parent">
        <id name="id">
            <generator class="sequence"/>
        </id>
        <set name="children" inverse="true">
            <key column="parent_id"/>
            <one-to-many class="Child"/>
        </set>
    </class>

    <class name="Child">
        <id name="id">
            <generator class="sequence"/>
        </id>
        <property name="name"/>
        <many-to-one name="parent" class="Parent" column="parent_id" not-null="true"/>
    </class>

</hibernate-mapping>





create table parent ( id bigint not null primary key )
create table child ( id bigint not null
                     primary key,
                     name varchar(255),
                     parent_id bigint not null )
alter table child add constraint childfk0 (parent_id) references parent





四、one-To-many单向   外键不为空Not Null
public class Parent {
    @Id
    @GeneratedValue
    private long id;

    @OneToMany(optional=false)
    private Set<Child> children;

    // getter/setter
    ...
}


public class Child {
   @Id
   @GeneratedValue
   private long id;
   private String name;

   
   // getter/setter
   ...
}





hibernate-mapping>

    <class name="Parent">
        <id name="id">
            <generator class="sequence"/>
        </id>
        <set name="children">
            <key column="parent_id" not-null="true"/>
            <one-to-many class="Child"/>
        </set>
    </class>

    <class name="Child">
        <id name="id">
            <generator class="sequence"/>
        </id>
        <property name="name"/>
    </class>

</hibernate-mapping>





五、many-To-many
public class Parent {
    @Id
    @GeneratedValue
    private long id;

    @ManyToMany
    private Set<Child> children;

    // getter/setter
    ...
}


public class Child {
   @Id
   @GeneratedValue
   private long id;

   private String name;

   
   // getter/setter
   ...
}




<hibernate-mapping>

    <class name="Parent">
        <id name="id">
            <generator class="sequence"/>
        </id>
        <set name="children" table="childset">
            <key column="parent_id"/>
            <many-to-many class="Child" column="child_id"/>
        </set>
    </class>

    <class name="Child">
        <id name="id">
            <generator class="sequence"/>
        </id>
        <property name="name"/>
    </class>

</hibernate-mapping>




create table parent ( id bigint not null primary key )
create table child ( id bigint not null primary key, name varchar(255) )
create table childset ( parent_id bigint not null,
                        child_id bigint not null,
                        primary key ( parent_id, child_id ) )
alter table childset add constraint childsetfk0 (parent_id) references parent
alter table childset add constraint childsetfk1 (child_id) references child

分享到:
评论

相关推荐

    hibernate对象三状态及OneToOne&OneToMany&ManyToMany

    本篇将详细阐述Hibernate中的对象三状态、一对一(OneToOne)、一对多(OneToMany)以及多对多(ManyToMany)关系映射。 一、Hibernate对象三状态 1. 游离态(Detached):对象在应用程序中创建,但尚未与Session...

    bibernate映射

    onetomany onetoone manytoone manytomany xml的

    各种任务:身份验证api,crud api,谷歌地图启动和路径跟踪,使用firebase实时移动经纬度,OnetoOne,OnetoMany,ManytoMany关系

    关于Laravel Laravel是一个具有表达力,优雅语法的Web应用程序框架。 我们认为,发展必须是一种令人愉悦的创造力,才能真正实现。 Laravel通过减轻许多Web项目中使用的常见任务来减轻开发工作的痛苦,例如: ...

    spring jpa ManyToMany原理及用法详解

    mappedBy 属性是 OneToOne、OneToMany 和 ManyToMany 三种关联关系的属性。用来标注拥有这种关系的字段。 例如,我们可以使用以下代码来定义 ManyToMany 关系: ```java @Entity public class Student { @Id ...

    AspEFcore.rar

    1. **一对一关联(OneToOne)**:这种关系中,两个实体类之间存在一个到另一个的唯一映射。例如,一个用户可能有一个唯一的个人资料。在EF Core中,可以通过定义外键或者使用独立关联来实现一对一关系。 2. **一对...

    hibernate.rar

    本压缩包“hibernate.rar”包含了关于Hibernate框架如何实现三种主要关联关系的源代码示例:一对一(OneToOne)、一对多(OneToMany)以及多对多(ManyToMany)。这些示例都是在Eclipse和MyEclipse开发环境中编写的...

    java注解源码级框架-orman:适用于Java/Android的轻量级和简约ORM。适用于SQLite和MySQL。(未积极维护)

    轻松管理实体之间的OneToOne 、 OneToMany 、 ManyToMany等关系。 让您非常快速地编写数据库使用者程序。 奥尔曼是... 开源(根据 Apache License 2.0 许可) 轻量级和小 (~170 kb)(替代品如 Hibernate ~4 mb) ...

    eclipselink-plugins-nosql-4.0.2.v20230613-3bfa6ac6dd.zip

    EclipseLink,开源的持久化框架,是Eclipse Foundation的一部分,它Eclipse...此外,EclipseLink还提供了一套丰富的实体映射规范,如@OneToOne、@OneToMany、@ManyToOne和@ManyToMany等注解,以支持SQL和NOSQL数据库。

    Hibernate关于注解的一对多,多对多,一对一

    `@OneToMany`、`@ManyToMany`和`@OneToOne`注解分别对应了一对多、多对多和一对一的关系映射,通过合理的配置,可以实现数据的高效管理和操作。在实际开发中,根据业务需求灵活运用这些注解,可以构建出稳定、可扩展...

    mybatis关联映射源码

    在MyBatis中,关联映射是处理对象关系映射(ORM)的重要部分,用于描述实体类之间的关联关系,如一对一(OneToOne)、一对多(OneToMany)和多对多(ManyToMany)。下面我们将深入探讨这些关联映射的实现和原理。 ...

    JPA关联关系

    本文将深入探讨JPA中的四种主要关联关系:一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。 1. **一对一关联(OneToOne)** 在一对一关联中,一个实体实例对应数据库中的唯...

    hibernate 关联例子

    本文将详细解析四种基本的关联类型:一对一(OneToOne)、多对多(ManyToMany)、一对多(OneToMany)和多对一(ManyToOne)。我们将探讨它们的概念、配置方式以及实际应用中的注意事项。 **一对一关联(OneToOne)**...

    EJB 一对一 一对多 多对多 的代码

    在EJB中,关系映射是数据模型的重要部分,主要包括一对一(OneToOne)、一对多(OneToMany)和多对多(ManyToMany)这三种关系类型。下面将详细阐述这些关系及其在EJB中的实现。 ### 一对一(OneToOne)关系 一对...

    hibernate3学习源码

    本资源包含多个示例,涵盖了Hibernate中的四种主要关联关系:一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany),同时涉及了注解版和XML配置文件的使用。 1. **一对一关联...

    Hibernate_范型_级联

    它支持多种关联关系,包括一对一(OneToOne)、一对多(OneToMany)、多对多(ManyToMany),并且提供了级联操作来方便地管理这些关联。 【文件名称列表】: 1. **OneToOne**:这个文件可能包含关于一对一关联关系...

    HIbernate-OneToMany:HIbernate-OneToMany Annotations 在实体之间具有 PKFK 关系

    在Java的持久化框架Hibernate中,一对一(OneToOne)、一对多(OneToMany)和多对多(ManyToMany)的关系映射是常见的实体关联方式。本篇文章将深入探讨标题中提到的"一对一"(OneToMany)注解在实体之间的主键外键...

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

    配置方式通常通过`@OneToOne`注解实现,可以设置`mappedBy`属性来指定在另一个实体中的反向关联字段。 ```java @Entity public class User { @OneToOne(mappedBy = "user") private Profile profile; } @Entity ...

    springside3

    主要的关联关系包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。这些关系通过配置文件或注解来定义,使得对象间的关联可以在数据库层面得以体现。 二、一对一关联...

    Y2-JAVA-1使用Hibernate开发租房系统内部考试笔试跟机试荅案

    3. 实体类与表映射:掌握注解或XML方式将Java对象映射到数据库表,包括Id、Column、OneToOne、OneToMany、ManyToMany等关系的映射。 4. Session接口:了解Session的生命周期和常用方法,如save()、update()、delete...

Global site tag (gtag.js) - Google Analytics