博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关系类型总结和对应的注解
阅读量:6306 次
发布时间:2019-06-22

本文共 2399 字,大约阅读时间需要 7 分钟。

1. Hibernate Annotation关系映射有下面几种类型:1)一对一外键关联映射(单向)2)一对一外键关联映射(双向)3)一对一主键关联映射(不重要)在这不演示在实际中很少用,使用注解@PrimaryKeyJoinColumn意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用注解一对一主键关联映射,在生成表的时候,数据库中并没有生成关联,使用XML映射可以生成。Annotation注解一对一主键关联映,有些bug。不过没空去研究它。因为在实际开发中一对一很少用。在实际开发中我机会没有用过,主键关联就更少了4)多对一关联映射5)一对多关联映射(单向)6)一对多关联映射(双向)7)多对多关联映射(单向)8)多对多关联映射(双向) 2.介绍各种映射用法1)一对一外键关联映射(单向)@OneToOne(cascade=CascadeType.ALL)@JoinColumn(name="userid",unique=true)//一对一外键关联,使用@OneToOne,并设置了级联操作//@JoinColum设置了外键的名称为userid(数据库字段名),如果不设置,则默认为另一类的属性名+ _id //外键的值是唯一的(unique),不可重复,与另一类的主键一直 2)一对一外键关联映射(双向) Class1里与上面一样,     Class2:@OneToOne(mappedBy="class2",cascade=CascadeType.ALL)//一对一双向关联关系,使用@OneToOne//注意:需要加上mappedBy="class2",如果不加上的话,//Class2也会生成一个外键(class1_id)//mappedby="class2"需要指向与他关联对象的一个属性//说明双向关联关系中,有且仅有一端是作为主体(owner)端存在的//主体端负责维护联接列//对于不需要维护这种关系的从表则通过mappedBy属性进行声明//mappedBy的值指向主体的关联属性//规律:只有是双向关联关系,都加上mappedby    //cascade=CascadeType.ALL级联 4)多对一关联映射在多的一端配置:@ManyToOne(targetEntity=Organization.class)@JoinColumn(name="orgid")//多对一注解@ManyToOne//targetEntity指定了关联对象//@JoinColumn(name="orgid")指定生产的外键的字段名,默认是org_id 5)一对多关联映射(单向)@OneToMany@JoinColumn(name="orgid")/** * 一对多注解@OneToMany(单向) * 如果只写@OneToMany的话,hibernate会建一张中间表来 * 维护他们之间的关系, * 加上@JoinColumn(name="orgid"),则不会建中间表,他会在 * 多的一端加上外键orgid,来维护他们之间的关系 */6)一对多关联映射(双向)一端:@OneToMany(mappedBy="org")@JoinColumn(name="orgid")/** * 一对多双向,在一的一端中设置mappedBy * 说明多的一端为主导 * 如果指定了外键字段名称,则多的一端也需要指定相同的字段名称 */ 多端:@ManyToOne@JoinColumn(name="orgid")/** * 一对多双向 * 需要指定外键与一的一端给的外键名称一致,@JoinColumn(name="orgid") * 也可以不指定,如果在多的一端不指定,则一的一端也不能指定 * 否则为生成两个外键 */ 7)多对多关联映射(单向) @ManyToMany/** * 多对多映射:注解@ManyToMany(单向) * 默认情况下,hibernate会自动的创建一张中间表, * 来维护多对多关系 * 默认中间表的名称 :user_role中间表,字段的名称user_id role_id * 如果想更换表名和字段名称,注解如下: */@JoinTable(name="t_u_r",joinColumns={@JoinColumn(name="u_id")},inverseJoinColumns={@JoinColumn(name="r_id")}) 8)多对多关联映射(双向)  User端@ManyToMany/** * 多对多映射:注解@ManyToMany(单向) * 默认情况下,hibernate会自动的创建一张中间表, * 来维护多对多关系 * 默认中间表的名称 :user_role中间表,字段的名称user_id role_id * 如果想更换表名和字段名称,注解如下: */@JoinTable(name="t_u_r",joinColumns={@JoinColumn(name="u_id")},inverseJoinColumns={@JoinColumn(name="r_id")})/** * @JoinTable(name="t_u_r", * 指定中间表的表名 * joinColumns={@JoinColumn(name="u_id")}, * 指定当前对象的外键 * inverseJoinColumns={@JoinColumn(name="r_id")} * 指定关联对象的外键 */ Role端@ManyToMany(mappedBy="role")/** * 多对多,双向关联映射 */

 

转载于:https://www.cnblogs.com/MarchThree/p/8039180.html

你可能感兴趣的文章
第4 章序列的应用
查看>>
Mysql explain
查看>>
初识闭包
查看>>
java tcp socket实例
查看>>
011 指针的算术运算
查看>>
hdu1874畅通工程续
查看>>
rails 字符串 转化为 html
查看>>
java-学习8
查看>>
AOP动态代理
查看>>
Oracle序列
查看>>
xcodebuild命令行编译错误问题解决
查看>>
Yii2.0 下的 load() 方法的使用
查看>>
华为畅玩5 (CUN-AL00) 刷入第三方twrp Recovery 及 root
查看>>
LeetCode----67. Add Binary(java)
查看>>
母版页 MasterPage
查看>>
[转] ReactNative Animated动画详解
查看>>
DNS原理及其解析过程
查看>>
记录自写AFNetWorking封装类
查看>>
没想到cnblog也有月经贴,其实C#值不值钱不重要。
查看>>
【转】LUA内存分析
查看>>