资源描述:
《注解-关联关系》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、注解关联关系知识篇标签:注解关联关系CascadeTypeFetchTypeFetchMode 首先介绍cascade(CascadeType)、fetch(FetchType)、FetchMode、mappedBy、inverseJoinColumns等 注解属性。1,cascade级联,用在@ManyToOne、@OneToMany、@ManyToMany情况下,cascade的值只 能从CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、cadeType.REFRESH(级联刷新)、Cas
2、cadeType.MERGE(级联更新)中选择一个或多个。还有一个更方便的选择是使用 CascadeType.ALL,表示选择上面全部四项.cascade=ALL等价于cascade={PERSIST,MERGE,REMOVE,REFRESH}.。2, fetch是否延迟加载,可选择项包括:FetchType.EAGER和FetchType.LAZY。前者表示关联关系的从类在主类加载的时候同时加载,后者表示关联关系的从类在自己被访问时才加载。默认FetchType.EAGER非延迟加载, 3, FetchMode有三种模式,@Fetch(Fetch
3、Mode.JOIN)会使用leftjoin查询 只产生一条sql语句 @Fetch(FetchMode.SELECT) 会产生N+1条sql语句 @Fetch(FetchMode.SUBSELECT) 产生两条sql语句第二条语句使用idin(.....)查询出所有关联的数据 4, mappedBy="xxx"通过这个属性来说明xxx是关系被维护端 5, inverseJoinColumns被维护端外键的定义1)@ManyToOne(fetch=FetchType,cascade=CascadeType) 可选 @Man
4、yToOne表示一个多对一的映射,该注解标注的属性通常是数据库表的外键 optional:是否允许该字段为null,该属性应该根据数据库表的外键约束来确定,默认为true fetch:表示抓取策略,默认为FetchType.EAGER cascade:表示默认的级联操作策略,可以指定为ALL,PERSIST,MERGE,REFRESH和REMOVE中的若干组合,默认为无级联操作 targetEntity:表示该属性关联的实体类型.该属性通常不必指定,ORM框架根据属性类型自动判断targetEntity. 示例: //订单Order和用户Use
5、r是一个ManyToOne的关系 //在Order类中定义 @ManyToOne() @JoinColumn(name="USER") publicUsergetUser(){ returnuser; } 2)@JoinColumn 可选 @JoinColumn和@Column类似,介量描述的不是一个简单字段,而一一个关联字段,例如.描述一个@ManyToOne的字段. name:该字段的名称.由于@JoinColumn描述的是一个关联字段,如ManyToOne,则默认的名称由其关联的实体决定. 例如
6、,实体Order有一个user属性来关联实体User,则Order的user属性为一个外键, 其默认的名称为实体User的名称+下划线+实体User的主键名称 示例:见@ManyToOne 3)@OneToMany(fetch=FetchType,cascade=CascadeType) 可选 @OneToMany描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段. fetch:表示抓取策略,默认为FetchType.LAZY,因为关联的多个对象通常不必从数据库预先读取到内存 cascade:表示级联操作
7、策略,对于OneToMany类型的关联非常重要,通常该实体更新或删除时,其关联的实体也应当被更新删除 还可以加@OrderBy("XXX ASC")进行排序 例如:实体User和Order是OneToMany的关系,则实体User被删除时,其关联的实体Order也应该被全部删除 示例: @OneTyMany(cascade=ALL) publicListgetOrders(){ returnorders; } 4)@OneToOne(fetch=FetchType,cascade=CascadeType)
8、可选 @OneToOne描述一个一对一的关联 fetch:表示抓取策略,默认为FetchType.LAZY c