您的位置:首页 > 其它

hibernate关联关系注解配置

2015-08-24 16:24 423 查看
使用hibernate关联关系是最复杂也最重要的部分,本文对常用的关联关系进行总结,并通过代码验证

一、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>();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: