映射关联关系
单向多对一
Order、Customer多对一
1) 使用@ManyToOne来映射多对一的关联关系。
2) 使用@JoinColumn来映射外键。
3) 使用@ManyToOne的fetch属性来修改默认关联属性的加载策略。
4) 保存时先保存1的一端,后保存多的一端,可避免产生多余的UPDATE语句。
5) 不能直接删除1的一端,存在外键约束。
单向一对多
1. 使用@OneToMany来映射1-n的关联关系
2. 使用@JoinColumn来映射外键列的名称。
3. 使用@OneToMany的fetch属性来修改默认加载策略。
4. 可通过@OneToMany的cascade属性来修改默认的删除策略。
casecade={CascadeType.REMOVE}
5. 删除操作时,由于由Customer方来维护关联关系,所以Customer不受外键约束,故Customer可删除,相应的Order的外键置为null。
双向一对多
1. 在进行双向1-n保存时,建议先保存1的一方,这样可以减少n条UPDATE语句。
2. 在进行双向 1-n 关联关系时, 建议使用 n 的一方来维护关联关系, 而 1 的一方不维护关联系, 这样会有效的减少 SQL 语句。
1) 可使用@OneToMany中的mapperBy属性来指定有哪个属性类维护关联关系。
2) 若在 1 的一端的 @OneToMany 中使用 mappedBy 属性, 则 @OneToMany 端就不能再使用 @JoinColumn 属性了。
使用对方中的customer属性来维护关联关系。
双向一对一
1. 双向1-1的关联关系,建议先保存不维护关联关系的一方,即没有为外键的一方,这样不会多出UPDATE语句。
2. 在双向的一对一关联中,需要在关系被维护端(inverse side)中的 @OneToOne 注释中指定mappedBy,以指定是这一关联中的被维护端
双向多对多
1. 使用@JoinTable设置中间表的属性。
2. name:指定中间表的名称。
3. joinColumns:设置本表与中间表的映射关系。
1) name:中间表的列名称。
2) referencedColumnName:本表相关列。
4. inverseJoinColumns:设置关联表与中间表的映射关系。
开启二级缓存
1. 在persistence.xml中配置信息,开启二级缓存相关信息。
2. 导入相关Jar包
3. 导入ehcache.xml文件
4. 在实体类中声明使用二级缓存