hibernate关联关系注解配置

本文详细介绍了Hibernate中常见的关联关系类型,包括一对一、一对多、多对一、多对多等,并通过代码实例验证了每种关系的实现方式及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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>();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值