hibernate关联关系注解配置
2015-08-24 16:24
423 查看
使用hibernate关联关系是最复杂也最重要的部分,本文对常用的关联关系进行总结,并通过代码验证
一、oneTomany (单向)
四 manytomany(单向)
一、oneTomany (单向)
Father.java @Entity @Table(name = "father") public class Father { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID") private Integer id; @Column(length = 20, nullable = false, name = "NAME") private String name; /* @OneToMany</span> * @Cascade(value={CascadeType.SAVE_UPDATE}) * 1.创建中间表 * 2.级联保存 删除的时候 仅仅删除father和关联关系 不会删除son * *@OneToMany *@Cascade(value={CascadeType.SAVE_UPDATE,CascadeType.DELETE}) *1.创建中间表 *2.级联保存/删除 删除的时候回删除关联关系和son表数据 * *@OneToMany *@Cascade(value={CascadeType.SAVE_UPDATE}) *@JoinColumn(name="f_id") *1.不创建中间表 ,自动在多方增加字段 *2.删除时关联数据外键置空 * * *@OneToMany *@Cascade(value={CascadeType.SAVE_UPDATE,CascadeType.DELETE}) *@JoinColumn(name="f_id") *1.不创建中间表 ,自动在多方增加字段 *2.删除时删除关联表数据 */ private Set<Son> sons = new HashSet<Son>(); …… Son.java @Entity @Table(name = "son") public class Son { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID") private Integer id; @Column(length = 20, nullable = false, name = "NAME") private String name; //不用设置father ……二 manytoone (单向)
Son.java @Entity @Table(name = "son") public class Son { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID") private Integer id; @Column(length = 20, nullable = false, name = "NAME") private String name; /** * @ManyToOne * @Cascade(value={CascadeType.SAVE_UPDATE}) * @JoinColumn(name="father_id") * 1.级联保存 * 2.删除时删除本数据 * * @ManyToOne * @Cascade(value={CascadeType.SAVE_UPDATE,CascadeType.DELETE}) * @JoinColumn(name="father_id") * 1.级联保存 * 2.删除时删除本数据,如果One方没有其他关联也删除,如果有则报错不能删除 */ private Father father; …… Father.java @Entity @Table(name = "father") public class Father { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID") private Integer id; @Column(length = 20, nullable = false, name = "NAME") private String name; //不用设置son ……三 onetomany(双向)
Father.java @OneToMany @Cascade(value={CascadeType.SAVE_UPDATE}) @JoinColumn(name="father_id") private Set<Son> sons = new HashSet<Son>(); Son.java @ManyToOne @Cascade(value={CascadeType.SAVE_UPDATE,CascadeType.DELETE}) @JoinColumn(name="father_id") private Father father; 双向配置跟单向配置的触发是类似的 上述配置的结果是 1.删除son端 会将father删除 同时将father关联的数据置空(非删除 如果要删除则在one方增加级联删除)
四 manytomany(单向)
@Entity @Table(name = "teacher") public class Teacher { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID") private Integer id; @Column(length = 20, nullable = false, name = "NAME") private String name; /** * @ManyToMany @JoinTable(name="stu_tea") @Cascade(value={CascadeType.SAVE_UPDATE}) 1.级联保存 2.删除时,删除teacher和中间表数据 @ManyToMany @JoinTable(name="stu_tea") @Cascade(value={CascadeType.SAVE_UPDATE,CascadeType.DELETE}) 1.级联保存 2.级联删除 */ @ManyToMany @JoinTable(name="stu_tea") @Cascade(value={CascadeType.SAVE_UPDATE,CascadeType.DELETE}) private Set<Student> teachers=new HashSet<Student>();
相关文章推荐
- 针对Xmodem的CRC校验代码
- 发微博&异步推拉模式 -- 多级缓存
- 操作系统设计思想
- Android的NDK开发(2)————利用Android NDK编写一个简单的HelloWorld
- JVM中的G1垃圾回收器
- iOS- NSThread/NSOperation/GCD 三种多线程技术的对比及实现
- 一些简单的递归算法
- Gradle – Spring 4 MVC Hello World Example – Annotation
- Echarts-java使用
- 10个有关String的面试问题
- Android的NDK开发(1)————Android JNI简介与调用流程
- RSA加密算法学习
- 利用runtime检测这个对象是否存在某属性?
- 设计模式——单例模式
- Hadoop之HDFS文件操作
- UVa-11988 Broken Keyboard (a.k.a. Beiju Text)
- ExtJs博客前奏
- 简道云-更新日志
- activity渲染结束的判断--onWindowFocusChanged
- ODPS简介