Hibernate实现双向一对多,多对一

人与电话号码是一对多 ,多对一的关系

@Entity
@Table(name="tb_person")
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;
    @OneToMany(mappedBy = "person")  /*在双向一对多关系中  将控制权交给“多”方  */
    private List<Telphone> telphoneList=new ArrayList<Telphone>();

    public Person(String name) {
        this.name = name;
    }

    public Person() {
    }

    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 List<Telphone> getTelphoneList() {
        return telphoneList;
    }

    public void setTelphoneList(List<Telphone> telphoneList) {
        this.telphoneList = telphoneList;
    }
}
@Entity
@Table(name="tb_telphone")
public class Telphone {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String number;
    @ManyToOne  //在多方配置级联
    @Cascade(value = org.hibernate.annotations.CascadeType.SAVE_UPDATE)
    @JoinColumn(name="person_id")
    private Person person;

    public Telphone() {
    }

    public Telphone(String number) {
        this.number = number;
    }

    public int getId() {
        return id;
    }

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

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }
}
    public static void doublemanyToOneTest()
    {
        Person p1=new Person("一号");
        Telphone t1=new Telphone("123456789");
        Telphone t2=new Telphone("987654321");
        p1.getTelphoneList().add(t1);
        p1.getTelphoneList().add(t2);
        t1.setPerson(p1);
        t2.setPerson(p1);

        Session session= Hibernate.getSession();
        session.beginTransaction();
        session.save(t1);     session.save(t2);
        session.getTransaction().commit();
        Hibernate.closeSession(session);
    }
时间: 2024-10-23 20:57:09

Hibernate实现双向一对多,多对一的相关文章

Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射

1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; private String userName; // 一个用户,对应的多个地址 private Set<String> address; private List<String> addressList = new ArrayList<String>(); //private Str

精通Hibernate——建立双向一对多关联

当类与类之间建立了关联,就可以方便的从一个对象导航到另一个对象或者一组与他关联的对象. 对象位于内存中,在内存中从一个对象导航到另一个对象显然比到数据库中查询数据速度快多了.类与类之间到底建立双向还是单向都是由业务决定.以Customer和Order为例,如果软件应用有大量这样的需求: 根据客户可以查询该客户所有的订单 根据给定的订单可以查询发出订单的客户 以上需求就需要我们为Customer和Order类创建双向关联,代码如下: public class Customer{ private S

7.hibernat实现双向一对多(多对一)

1.创建如下项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.

Hibernate5.2关联关系之双向一对多(三)

                                                       Hibernate之双向一对多(三) 一.简介 本篇博文接着上一章的内容接着开展,代码也是在上篇博文的基础上修改. 二.hbm文件的方式 Customer.hbm.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hi

Hibernate中用注解配置一对多双向关联和多对一单向关联

Hibernate中用注解配置一对多双向关联和多对一单向关联 Hibernate提供了Hibernate Annotations扩展包,使用注解完成映射.在Hibernate3.3之前,需单独下载注解开发包 配置持久化类 配置关联关系 下面我们先从多对一单向关联关系讲起,多对一单向关联就是在多的一方植入一的一方的主键作为外键,下面我们先进行初始配置, 在配置的过程中我们会遇到一个问题  就是无论用load还是get都不会出现延迟加载,那么我们应该如何设置为要延迟加载,这样做的好处是可以在用的时候

hibernate中配置单向多对一关联,和双向一对多

什么是一对多,多对一?双向多对一和双向一对多是不是同一个概念? 是一个概念,双向多对一和双向一对多都是配置一个 一对多和多对一 一对多,比如你去找一个父亲的所有孩子,孩子可能有两个,三个甚至四个孩子. 这就是一对多 父亲是1 孩子是多 多对一,比如你到了两个孩子,它们都是有一个共同的父亲. 此时孩子就是多 父亲是1  总结: 一对多就是: 1找到n 多对一就是: n找到1 有些人写概念写一大堆搞起我之前是一脸懵逼,还好弄懂了(手动滑稽) 配置单向多对一 通过上面我们可以了解,双向一对多是 1找n

Hibernate 单向/双向 多对多

Hibernate的多对多从单向和双向来分就是单向多对多和双向多对多两种. Hibernate的双向多对多 先来说一下什么是多对多的关系,举个例子,老师和学生,老师有语文老师,数学老师,英语老师等等,学生可以是1班的学生也可以是2班的学生,对于每个学生而言,他有多个老师给他讲课,而对于每一个老师而言,他要授课的学生也有很多,像这样的情况就可以描述成多对多了.即两个表之间,每一个表中的记录都对应另一个表的部分或全部记录的集合,这种情况就是多对多关系,而单向多对多与双向多对多的不同在于单向只是一方的

框架 day32 Hibernate,一级缓存,关联关系映射(一对多,多对多)

一级缓存 概念 *在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java集合构成了Session缓存. 只要 Session 实例没有结束生命周期, 存放在它缓存中的对象也不会结束生命周期 *当session的save()方法持久化一个对象时,该对象被载入缓存, 以后即使程序中不再引用该对象,只要缓存不清空,该对象仍然处于生命周期中. 当试图get(). load()对象时,会判断缓存中是否存在该对象,有则返回,此时不查询数据库.没有再查询数据库 *Session 能够在

Hibernate一对多(多对一)关联关系

上一篇博文总结了 Hibernate 的一对一的关联关系, 包括基于主键的单向一对一, 基于外键的单向一对一, 基于外键的双向一对一. 下面咱们说一下 Hibernate 的一对多关联关系. 其实一对多和多对一是一样的, 一对多反过来想就是多对一了. Hibernate的一对多可分为: 1. 单向一对多. 2. 双向一对多. OneByOne 一: 单向一对多 准备工作: 咱们以 客户(Customer) 和 订单(Order) 的例子来说, 一个客户可以有多个订单, 但是一个订单只能属于一个客