单向多对一关联映射
语法:
需要在“多”的一方(主动方)的持久化类中声明一个“一”方(被动方)类型的成员变量,并定义对应该变量的属性(关联属性)的setter和getter方法。
在“多”的一方的映射文件中使用来定义关联关系及关联属性,并在其中使用column属性设置指向被动方主键的关联外键。
在测试类中调用关联属性的setter方法设置外键值。
单向一对多关联映射
语法:
在“一”的一方(主动方)的持久化类中声明一个元素为“多”方(被动方)类型的集合成员变量,并定义对应该集合变量的属性(关联属性)的setter和getter方法。
在主动方的映射文件中使用设置关联属性。
在标记对之间使用设置被动方映射表中的外键字段名(对应主动方映射表主键)。
使用来定义关联关系。
可在中使用cascade属性设置级联操作(可选)
在测试类中调用关联属性的getter方法添加集合元素设置外键值。
双向一对多关联映射
语法:
同时应用单向一对多和单向多对一关联的语法
可在一对多关联的配置中设置控制反转:在中设置属性inverse=“true”可将控制权由“一”方转给“多”方(可选)
关联关系映射注解
@OneToMany(targetEntity=所关联的类名.class,cascade=CascadeType.枚举值|mappedBy=关联关系维护的关联属性名, fetch=FetchType.枚举值)
关联属性的类型如果可由变量或访问器确定时,可以省略targetEntity属性。
CascadeType可取的枚举值有:ALL、REMOVE、 PERSIST等值。
mappedBy属性用于指定由哪个持久化类中的关联属性来维护关联关系。当设置了这个属性时,不能设置cascade属性。
fetch属性指定何时获取被动方对象,可取的枚举值为:EAGER和LAZY,默认值为LAZY
@ManyToOne(targetEntity=所关联的名.class, cascade=CascadeType.枚举值, optional= true|false,fetch=FetchType.枚举值)
optional表示主动方对象存在时,被动方对象是否必须存在,默认值为true,表示被动方对象可以不存在。
该注解没有mappedBy属性。
fetch属性指定何时获取被动方对象,可取的枚举值为:EAGER和LAZY,默认值为EAGER。
@OneToOne(targetEntity=所关联的类名.class,cascade=CascadeType.枚举值|mappedBy=关联关系维护的关联属性名, optional=true|false,fetch=FetchType.枚举值)
fetch属性指定何时获取被动方对象,可取的枚举值为:EAGER和LAZY,默认值为EAGER。
@ManyToMany(targetEntity=所关联的类名.class,cascade=CascadeType.枚举值|mappedBy=关联关系维护的关联属性名, fetch=FetchType.枚举值)
fetch属性指定何时获取被动方对象,可取的枚举值为:EAGER和LAZY,默认值为LAZY。
@JoinColumn(name=外键字段名, unique=true|false,nullable=true|false, insertable=true|false,updatable=true|false)
该注解用于设置外键字段相关信息。
unique、nullable、insertable和updatable默认值都为true。
不设置该注解时,默认生成的外键字段名为:关联属性_id
@JoinTable(name=“中间表名”, joinColumns={@JoinColumn(name=“主动方映射的外键字段名”)}, inverseJoinColumns={ @JoinColumn(name = “被动方映射的外键字段名”) },…)
该注解用于设置中间表相关信息。