constrained:one-to-one的单向关联中,如果constrained=false,则会在查询时就全部取出来,用left outer join的方式。如果constrained=true,hibernate即会延迟加载sql,只把主表的查出来,等有用到关联表的再发sql取。
access:默认使用property,即使用get/set 方法访问属性;field,即绕过get/set方法,直接使用反射访问字段属性;
cascade:级联操作,虽然是save-update ,但是作用仅仅是多调一次update 方法更新一下外键。所以每个对象都是要用save 保存一遍的
fetch:集合检索策略,
fetch.1.默认是“select”,通过正常的方式来初始化 set 元素
fetch.2.取值为 “subselect”(决定查询语句的形式)。通过子查询的方式来初始化所有的set 集合 (查询语句是 where 子查询句子的 in 的条件出现,此时 lazy 有效,但是 batch-size 无效,因为已经查询所有 set 集合了)
fetch.3. 取值为 “join”(决定集合初始化的时机)。在加载1 这一端时,使用迫切做外连接的方式检索集合属性,lazy 属性无效。用 HQL 查询的话,忽略此处 fetch = join 的取值
order-by : 按照多这一端的某个字段进行排序
batch-size : <class><set> 两个元素都能设置,用来为延迟检索策略或者立即检索策略设定的批量检索数量(实际上查出来的是代理对象)。能够减少 SELECT 语句的数目,提高检索的运行性能。例如batch-size=5:执行的sql 语句:select * from orders where customer_id in (1,2,3,4,5)
inverse:放弃维护关联关系
component:
public class Worker {
private Integer id;
private String name;
private Pay pay;
public class Pay {
private int monthlyPay;
private int yearPay;
private int vocationWithPay;
多对一:
public class Customer {
private Integer id;
private String customerName;
public class Nrder {
private Integer id;
private String nrderName;
private Customer customer;
也可以这样写多对一(此处针对<set> 多配置了几个属性)
public class Customer {
private Integer id;
private String customerName;
private Set<Nrder> nrders = new HashSet();
public class Nrder {
private Integer id;
private String nrderName;
双向多对一 key标签是指当前映射文件类的主键:
public class Customer {
private Integer id;
private String customerName;
private Set<Nrder> nrders = new HashSet();
public class Nrder {
private Integer id;
private String nrderName;
private Customer customer;
一对一(外键映射):
public class Department {
private Integer depId;
private String departName;
private Manager manager;
public class Manager {
private Integer mgrId;
private String mgrName;
private Integer age;
private Department department;
一对一(主键映射):实体类同上
多对多:
public class Category {
private Integer id;
private String name;
private Set<Item> items = new HashSet<>();
public class Item {
private Integer id;
private String name;
双向多对多:(必须有一方放弃关联)
public class Category {
private Integer id;
private String name;
private Set<Item> items = new HashSet<>();
public class Item {
private Integer id;
private String name;
Set<Category> categories = new HashSet<>();
继承:(subclass,父类子类共用一张表)
public class Goods {
private Integer id;
private String name;
private String weigh;
public class Apple extends Goods{
private String season;
继承:(joined_subclass,每个子类一张表,只有独有的column)实体类同上
继承:(union_subclass,每个子类一张表,有父类的column)实体类同上