多对一/一对一
一般有多的一方来维护关联关系, //映射单向 n-1 的关联关系
//使用 @ManyToOne 来映射多对一的关联关系
//使用 @JoinColumn 来映射外键.
//可使用 @ManyToOne 的 fetch 属性来修改默认的关联属性的加载策略
@JoinColumn(name="1的一方的id")
@ManyToOne(fetch=FetchType.LAZY)
保存的时候建议先保存 1 的一方 ,这样不会多出n条update语句
获取n的一方的时候,用做外链接方式来获取1的一方的对象,可以使用@ManyToOne的fetch属性来设置为懒加载
不能直接删除1的一方,因为有键约束
多对多
//使用 @ManyToMany 注解来映射多对多关联关系
//使用 @JoinTable 来映射中间表
//1. name 指向中间表的名字
//2. joinColumns 映射当前类所在的表在中间表中的外键
//2.1 name 指定外键列的列名
//2.2 referencedColumnName 指定外键列关联当前表的哪一列
//3. inverseJoinColumns 映射关联的类所在中间表的外键
@JoinTable(name="ITEM_CATEGORY",
joinColumns={@JoinColumn(name="ITEM_ID", referencedColumnName="ID")},
inverseJoinColumns={@JoinColumn(name="CATEGORY_ID", referencedColumnName="ID")})
@ManyToMany
@ManyToMany(mappedBy="categories")//另一方放弃维护
对于关联的集合对象, 默认使用懒加载的策略. 使用维护关联关系的一方获取, 还是使用不维护关联关系的一方获取, SQL 语句相同.