hibernate ——关联关系

1、一对一单向外键关联

<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <!-- <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
                    <property name="connection.url">jdbc:hsqldb:hsql://localhost/TestDB</property> -->

        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/test?useUnicode=true&amp;characterEncoding=UTF-8</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>
        <property name="hbm2ddl.auto">update</property>
        <!-- SQL dialect -->
        <property name="dialect">
            org.hibernate.dialect.MySQL5InnoDBDialect
        </property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
         <mapping class="com.pt.hibernate.Husband" />
         <mapping class="com.pt.hibernate.Wife" />
    </session-factory>

</hibernate-configuration>

hibernate.cfg.xml

package com.pt.hibernate;

import java.util.Date;

import javax.annotation.Generated;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;

@Entity
public class Husband {
    int id;
    String name;
    Date bornTime;
    Wife myWife ;

    @OneToOne
    @JoinColumn(name="wifiId")    //指定外键字段名
    public Wife getMyWife() {
        return myWife;
    }

    public void setMyWife(Wife myWife) {
        this.myWife = myWife;
    }

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBornTime() {
        return bornTime;
    }

    public void setBornTime(Date bornTime) {
        this.bornTime = bornTime;
    }

}

Husband.java

package com.pt.hibernate;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Wife {
    int id;
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getBornTime() {
        return bornTime;
    }
    public void setBornTime(Date bornTime) {
        this.bornTime = bornTime;
    }
    String name;
    Date bornTime;
}

Wife

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Test {
    public static void main(String[] arges){
        Configuration cfg = new Configuration();
        SessionFactory factory = cfg.configure().buildSessionFactory();
    }
}

Test

2、一对一双向外键关联

  两个相关联的实体类都写上@OneToOne即可,如果指定OneToOne的(mappedBy="")属性,这样就不会在两个表中都保留对方的ID,只会在其中一个表中保留对方的ID。只要有双向关联,该属性必设置。

package com.pt.hibernate;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Entity
public class Wife {
    int id;
    String name;
    Date bornTime;
    Husband myHusband ;
    @OneToOne(mappedBy="myWife")
    public Husband getMyHusband() {
        return myHusband;
    }
    public void setMyHusband(Husband myHusband) {
        this.myHusband = myHusband;
    }
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getBornTime() {
        return bornTime;
    }
    public void setBornTime(Date bornTime) {
        this.bornTime = bornTime;
    }

}

Wife

3、多对一单向外键关联

  多对一,数据库中的表现是在多的一方记录一的一方的ID,添加Son类,同时在配置文件中配置,Son类如下:

package com.pt.hibernate;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class Son {
    int id;
    String name;
    Husband myFather;

    @ManyToOne
    @JoinColumn(name="fatherId")
    public Husband getMyFather() {
        return myFather;
    }
    public void setMyFather(Husband myFather) {
        this.myFather = myFather;
    }
    @Id
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

Son

4、多对一双向外键关联

  在3、的基础上,修改Husband类,如下:

package com.pt.hibernate;

import java.util.Date;
import java.util.Set;

import javax.annotation.Generated;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

@Entity
public class Husband {
    int id;
    String name;
    Date bornTime;
    Wife myWife ;
    Set<Son> sons;

    @OneToMany(mappedBy="myFather")
    public Set<Son> getSons() {
        return sons;
    }

    public void setSons(Set<Son> sons) {
        this.sons = sons;
    }

    @OneToOne
    @JoinColumn(name="wifiId")    //指定外键字段名
    public Wife getMyWife() {
        return myWife;
    }

    public void setMyWife(Wife myWife) {
        this.myWife = myWife;
    }

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBornTime() {
        return bornTime;
    }

    public void setBornTime(Date bornTime) {
        this.bornTime = bornTime;
    }

}

Husband

时间: 2024-10-12 09:30:07

hibernate ——关联关系的相关文章

Hibernate关联关系的CRUD

本文以Group和User(一对多.多对一)双向关联为例,介绍关联关系的CRUD   下面先介绍两个属性 cascade:只影响CRUD中的CUD,即存储(save).更新(update).删除(delete) fetch:只影响CRUD中的R,即读取(get.load)   cascade(级联): 此属性仅仅帮助我们简化编程,不是必选项 如果A和B为单向关联,则在主导方设置cascade属性 如果A和B为双向关联,则在双方都要设置cascade属性 如果两个对象之间有关联关系,比如User和

Hibernate关联关系映射(单向篇)

Hibernate关联关系可分为单向关联和双向关联两大类.单向关联可以分为一对一.一对多.多对一和多对多4种关联方式,而多向关联可以分为一对一.一对多和多对多3种关联方式. Hibernate连接管理类HibernateUtil.java public class HibernateUtil { private static SessionFactory sessionFactory; private static final ThreadLocal<Session> threadLocal

hibernate关联关系

hibernate是一个强大的ORM框架,为了使用面向对象的方式管理数据库,hibernate提供了4中关系设置: 1.一对一 (one-to-one) 2.一对多 (one-to-many) 3.多对一 (many-to-one) 4.多对多 (many-to-many) 5最常用的关系是一对多和多对一 6.实现方式: 一对多:在"一方"定义"多方"的集合(set集合) 多对一: 在"多方"定义"一方"的引用(对象属性),多

hibernate关联关系映射之配置文件

词汇解释 关系:事物之间相互作用.相互联系的状态.范围最大. 联系:在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 关联:表示对象之间的关系,既有数量性,又有方向性:动词:将对象之间通过某种方式联系起来. 映射:这里指java对象和数据库表的一种对应关系.动词:形成这种对应关系. 级联:有关系的双方中操作一方,另一方也将采取一些动作. 关联的联系种类 在不考虑关联的方向前提下,联系就是关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 一对一联系(1:1):如用户和

hibernate 关联关系(多对一、多对多、一对一)的配置

1:多对一 一般关系由多的一方来维护 多的一方需要有一方的字段,一的一方要有多的一方的set集合 一方的配置文件: ClientEntity为一的一方,OrderEntity为多的一方 <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hiberna

Hibernate关联关系映射之一对一关联关系

人和身份证之间就是一个典型的一对一关联关系.实现一对一关联关系映射的方式有两种一种是基于外键,一种是基于主键,下面我们先看基于外键的关联方式 首先看他们的实体类 Person类 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 package entity; public class Person {     private Integer id;     private String name;     pr

hibernate关联关系映射

本文将介绍hibernate的几种关联关系映射:多对一.一对一.一对多.多对多. 多对一 以用户和组为例,假设多个用户对应一个组,用户即为多的一端,组即为一的一端. 关键代码和配置: 用户: public class User implements Serializable { private static final long serialVersionUID = 1L; private Long id; private String name; private Group group; pu

Hibernate关联关系配置(一对一,一对多以及多对多)

hihernate一对多关联映射(单向Classes----->Student) 一对多关联映射利用了多对一关联映射原理 多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多 也就是说一对多和多对一的映射策略是一样的,只是站的角度不同 在一一端维护关系的缺点: * 如果将t_student表里的classesid字段设置为非空,则无法保存 * 因为不是在student这一端维护关系,所以student

hibernate关联关系映射详解

词汇解释 关系:事物之间相互作用.相互联系的状态.范围最大. 联系:在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 关联:表示对象之间的关系,既有数量性,又有方向性:动词:将对象之间通过某种方式联系起来. 映射:这里指java对象和数据库表的一种对应关系.动词:形成这种对应关系. 级联:有关系的双方中操作一方,另一方也将采取一些动作. 关联的联系种类 在不考虑关联的方向前提下,联系就是关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 一对一联系(1:1):如用户和

Hibernate关联关系配置(一对多、一对一和多对多)

第一种关联关系:一对多(多对一) "一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系. 一对多:从消费者角的度来说一个消费者可以有多个订单,即为一对多. 多对一:从订单的角度来说多个订单可以对应一个消费者,即为多对一. 一对多关系在hbm文件中的配置信息: 消费者(一方): <?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC