- ManyToOne:多对一、单向,不产生中间表,但可以用@JoinColumn(name=" ")来指定生成外键的名字,外键在多的一方表中产生。
- OneToMany:一对多、单向,会产生中间表,此时可以用@OneToMany@JoinColumn(name=" ") 避免产生中间表,并且指定了外键的名字,同样,外键在多的表中存在着。
- OneToMany+ManyToOne双向(一起用)。如果不在@OneToMany中加mappedy属性就会产生中间表,此时,通常在@ManyToOne的注解下再填上注解@Joincolumn(name=" ") 来指定外键的名字(多的一方为关系维护端,关系维护端负责外键记录的更新,关系被维护端没有权利更新外键记录)
@OneToMany(mappedBy=“一对多中,多中一的属性”) 出现mappedBy为被维护端,默认为延迟加载。
例子:
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="child_id")
private OrderChild orderChild;
@OneToMany(mappedBy="orderChild",fetch= FetchType.LAZY,cascade={CascadeType.MERGE})
@NotFound(action=NotFoundAction.IGNORE)//代表可以为空
private List<OrderChildGoods> goodsList;
hibernate中@ManyToOne默认是立即加载,@OneToMany默认是懒加载。
但是如果加上了@NotFound之后,设置的fetch=FetchType.LAZY是不起作用的,也就是设置@NotFound后变为了立即加载。