HIberiante注解(二)

关系映射级别注解

一对一单向外键

  • @OneToOne(cascade=CascadeType.ALL)
  • @JoinColumn(name="pid", unique=true)

@OneToOne(cascade=)
表示级联关系
@JoinColumn(name="pid", unique=true)
表示外键关联, 对应关联类的列名

这里我们以学生和身份证号为模型,一个身份证号可以唯一的对应一个学生,一个学生有一个唯一的身份证号

@Entity
public class IDCard {

    @Id
    @GeneratedValue(generator="pid")
    @GenericGenerator(name="pid", strategy="assigned")
    @Column(length=18)
    private String pid;     // 身份证号码
    private String sname;   // 学生的姓名
}
@Entity
public class Student {

    @Id
    @GeneratedValue
    private int sid;
    private Date birthday;
    
    @OneToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="pid", unique=true)
    private IDCard idCard;
}

因为是Student中有一个指向IDCard表主键的字段pid,所以主控方是Student,所谓主控方就是能改变关联关系的一方,Student只要改变pid就改变了关联关系

一对一双向外键

  1. 主控方的配置同一对一单向外键关联
  2. @OneToOne(mappedBy="idCard") // 被控方

mappedBy中的属性是,主控方中外键的属性。
双向关联,必须设置mappedBy属性。因为双向关联只能交给一方去控制,不可能在双方都设置外键保存关联关系,否则双发都无法保存。

@Entity
public class IDCard {

    @Id
    @GeneratedValue(generator="pid")
    @GenericGenerator(name="pid", strategy="assigned")
    @Column(name = "pid", length=18)
    private String pid;     // 身份证号码
    private String sname;   // 学生的姓名
    
    @OneToOne(mappedBy="idCard")
    private Student student;
}

Student和上面一样没有任何改变

多对一单向外键

多方持有一方的引用, 比如:多个学生对应一个班级

@ManyToOne(cascade={CascadeType.All}, fetch=FetchType.EAGER)
fetch: 抓取策略。

@JoinColumn(name="cid", referencedColumnName="id")
name:多方外键的列名
referencedColumnName:一方主键的列名

/**
 * 教室,一的一方
 * @author whyalwaysmea
 */
@Entity
public class ClassRoom {

    @Id
    @Column(name="id")
    @GeneratedValue(generator="cid")
    @GenericGenerator(name="cid", strategy="uuid")
    private String classRoomId;
    
    private String classRoomName;

}
/**
 * 学生类,多的一方
 * @author whyalwaysmea
 */
@Entity
public class Student {

    @Id
    @GeneratedValue
    private int sid;
    private String sname;
    
    @ManyToOne(cascade= {CascadeType.ALL}, fetch=FetchType.EAGER)
    @JoinColumn(name="cid", referencedColumnName="id")
    private ClassRoom classRoom;
}

一对多单向外键

一方持有多方的集合,一个班级有多个学生

@OneToMany(cascade={CascadeType.All}, fetch=FetchType.LAZY)
@JoinColumn(name="cid")

多对多单向外键

学生和教师构成多对多的关联关系
其中一个多方持有另一个多方的集合对象(学生持有教室的集合)
创建中间表

@Entity
public class Teacher {

    @Id
    @GeneratedValue(generator="tid")
    @GenericGenerator(name="tid", strategy="uuid")
    private String tid;
    
    private String tname;
}
@Entity
public class Student {

    @Id
    @GeneratedValue(generator="sid")
    @GenericGenerator(name="sid", strategy="uuid")
    private String sid;
    
    private String sname;
    
    @ManyToMany
    @JoinTable(name = "teachers_students", 
            inverseJoinColumns = {@JoinColumn(name = "teacherId", referencedColumnName="tid")},
                    joinColumns = {@JoinColumn(name = "studentId", referencedColumnName="sid")} 
    )
    private Set<Teacher> teachers = new HashSet<>();
}

参考

代码下载
Hibernate注解

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • 使用注解的目的是简化繁琐的ORM映射文件(.hbm)的配置 JPA全称是java Persistence API(...
    曹达兴阅读 2,559评论 0 5
  • 1.类级别注解 @Entity映射实体类 @Table映射数句库表 @Entity(name="tableName...
    苗義阅读 1,128评论 0 47
  • JPA Java Persistence API----java持久化接口 Hibernate注解分类 类级别注解...
    蕊er阅读 565评论 0 2
  • 2017年8月21日 我原本只想简单记录一下springboot中应用Jpa的简单操作。不想由于hibernate...
    行者N阅读 6,481评论 0 23
  • 这样的朋友就该拉黑名单 所谓朋友大约是那些你认为 在这个世界上和你最相近的人。 你们有一样的目标 有相似的人生经历...
    Tuka_图卡阅读 462评论 0 6