设为首页 加入收藏

TOP

hibernate关联映射(三)
2015-11-21 01:41:43 来源: 作者: 【 】 浏览:1
Tags:hibernate 关联 映射
ame; private Set dreams=new HashSet<>(); @Id @GeneratedValue public int getId() { return id; } @OneToMany(mappedBy="person") public Set getDreams() { return dreams; } }ok,我们可以在代码里,通过dream获得person也可以通过person获得dream



多对多单向关联

例子很简单,一个老师可以教多个学生,一个学生可以被多个老师教。
单向是说,要么老师能"知道"自己的学生,要么学生能知道自己的老师。
我们先看老师能"知道"自己学生的代码。

package com.bjsxt.hibernate;

@Entity
public class Student {
    private int id;
    private String name;
    
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
}
OK,学生里面没有老师的引用。
package com.bjsxt.hibernate;

@Entity
public class Teacher {
    private int id;
    private String name;
    private Set students = new HashSet();
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
    
    @ManyToMany
    @JoinTable(name="t_s",
        joinColumns={@JoinColumn(name="teacher_id")},
        inverseJoinColumns={@JoinColumn(name="student_id")}
        )
    public Set getStudents() {
        return students;
    }
}
看结果:
21:10:35,854 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 -
    create table Student (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )
21:10:36,192 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 -
    create table Teacher (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )
21:10:36,643 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 -
    create table t_s (
        teacher_id integer not null,
        student_id integer not null,
        primary key (teacher_id, student_id)
    )
21:10:36,947 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 -
    alter table t_s
        add index FK1BF68BF77BA8A (teacher_id),
        add constraint FK1BF68BF77BA8A
        foreign key (teacher_id)
        references Teacher (id)
21:10:37,588 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 -
    alter table t_s
        add index FK1BF68AEDC6FEA (student_id),
        add constraint FK1BF68AEDC6FEA
        foreign key (student_id)
        references Student (id)
21:10:38,263? INFO org.hibernate.tool.hbm2ddl.SchemaExport:268 - schema export complete

我们看看生成的t_s表和里面的字段名称应该就能明白 @JoinTable的作用
它就是在manytomany时,指定第三张表的表名和字段。
joinColumns 指的是指向自己这个类的字段名
inverseJoinColumns inverse是反向的意思 所以这个标签就是执行另外那个类的字段
如果没有 @JoinTable这个标签,会是什么样子呢?大家自己试一下。
另外,上面的代码是从老师到学生,大家再试试从学生到老师。


多对多双向关联

在上面的例子里
改变student,给它加上teacher的引用。

package com.bjsxt.hibernate;


@Entity
public class Student {
    private int id;
    private String name;
    private Set teachers=new HashSet<>();
    
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
    
    //记着 双向的时候 就加上mappedBy
    @ManyToMany(mappedBy="students")
    public Set getTeachers() {
        return teachers;
    }

}

glt likes dlf

dlf likes glt

oneToOne



首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Redis消息队列 下一篇HiveJoin

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: