hibernate注解版关联映射

hibernate注解版关联映射

ID:14269393

大小:74.00 KB

页数:19页

时间:2018-07-27

上传者:U-3775
hibernate注解版关联映射_第1页
hibernate注解版关联映射_第2页
hibernate注解版关联映射_第3页
hibernate注解版关联映射_第4页
hibernate注解版关联映射_第5页
资源描述:

《hibernate注解版关联映射》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

hibernate注解版关联映射属性介绍:1.多对一:[html] viewplaincopy1.@ManyToOne(fetch=FetchType,cascade=CascadeType)   @ManyToOne表示一个多对一的映射,该注解标注的属性通常是数据库表的外键 optional:是否允许该字段为null,该属性应该根据数据库表的外键约束来确定,默认为true fetch:表示抓取策略,默认为FetchType.EAGER cascade:表示默认的级联操作策略,可以指定为ALL,PERSIST,MERGE,REFRESH和REMOVE中的若干组合,默认为无级联操作 targetEntity:表示该属性关联的实体类型.该属性通常不必指定,ORM框架根据属性类型自动判断targetEntity. 示例: @ManyToOne表示一个多对一的映射,该注解标注的属性通常是数据库表的外键 optional:是否允许该字段为null,该属性应该根据数据库表的外键约束来确定,默认为true fetch:表示抓取策略,默认为FetchType.EAGER cascade:表示默认的级联操作策略,可以指定为ALL,PERSIST,MERGE,REFRESH和REMOVE中的若干组合,默认为无级联操作 targetEntity:表示该属性关联的实体类型.该属性通常不必指定,ORM框架根据属性类型自动判断targetEntity. 示例: @ManyToOne表示一个多对一的映射,该注解标注的属性通常是数据库表的外键 optional:是否允许该字段为null,该属性应该根据数据库表的外键约束来确定,默认为true fetch:表示抓取策略,默认为FetchType .EAGER cascade:表示默认的级联操作策略,可以指定为ALL,PERSIST,MERGE,REFRESH和REMOVE中的若干组合,默认为无级联操作 targetEntity:表示该属性关联的实体类型.该属性通常不必指定,ORM框架根据属性类型自动判断targetEntity. 示例:[java] viewplaincopy1.//订单Order和用户User是一个ManyToOne的关系   2.    //在Order类中定义   3.    @ManyToOne()   4.    @JoinColumn(name="USER")   5.    public User getUser() {   6.       return user;   7.    }    1.  2.[html] viewplaincopy1.@JoinColumn  @JoinColumn 和@Column类似,介量描述的不是一个简单字段,而一一个关联字段,例如.描述一个@ManyToOne的字段. name:该字段的名称.由于@JoinColumn描述的是一个关联字段,如ManyToOne,则默认的名称由其关联的实体决定. 例如,实体Order有一个user属性来关联实体User,则Order的user属性为一个外键, 其默认的名称为实体User的名称+下划线+实体User的主键名称 示例:见@ManyToOne3.一对多:[html] viewplaincopy1.@OneToMany(fetch=FetchType,cascade=CascadeType)   2.  @OneToMany 描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段. fetch:表示抓取策略,默认为FetchType.LAZY,因为关联的多个对象通常不必从数据库预先读取到内存 cascade:表示级联操作策略,对于OneToMany类型的关联非常重要,通常该实体更新或删除时,其关联的实体也应当被更新删除 例如:实体User和Order是OneToMany的关系,则实体User被删除时,其关联的实体Order也应该被全部删除 示例: @OneToMany描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段. fetch:表示抓取策略,默认为FetchType.LAZY,因为关联的多个对象通常不必从数据库预先读取到内存 cascade:表示级联操作策略,对于OneToMany类型的关联非常重要,通常该实体更新或删除时,其关联的实体也应当被更新删除 例如:实体User和Order是OneToMany的关系,则实体User被删除时,其关联的实体Order也应该被全部删除 示例: [java] viewplaincopy1.@OneTyMany(cascade=ALL)   2.    public List getOrders() {   3.       return orders;   4.    }   5.  4. [html] viewplaincopy1.@OneToOne(fetch=FetchType,cascade=CascadeType)  @OneToOne描述一个一对一的关联 fetch:表示抓取策略,默认为FetchType.LAZY cascade:表示级联操作策略 示例: @OneToOne描述一个一对一的关联 fetch:表示抓取策略,默认为FetchType.LAZY cascade:表示级联操作策略 示例: [html] viewplaincopy 1.@OneToOne(fetch=FetchType.LAZY)   2.    public Blog getBlog() {   3.       return blog;   4.    }   5.  5.[html] viewplaincopy1.@ManyToMany   2.  @ManyToMany 描述一个多对多的关联.多对多关联上是两个一对多关联,但是在ManyToMany描述中,中间表是由ORM框架自动处理 targetEntity:表示多对多关联的另一个实体类的全名,例如:package.Book.class mappedBy:表示多对多关联的另一个实体类的对应集合属性名称 示例: User实体表示用户,Book实体表示书籍,为了描述用户收藏的书籍,可以在User和Book之间建立ManyToMany关联@ManyToMany描述一个多对多的关联.多对多关联上是两个一对多关联,但是在ManyToMany描述中,中间表是由ORM框架自动处理 targetEntity:表示多对多关联的另一个实体类的全名,例如:package.Book.class mappedBy:表示多对多关联的另一个实体类的对应集合属性名称 示例: User实体表示用户,Book实体表示书籍,为了描述用户收藏的书籍,可以在User和Book之间建立ManyToMany关联 [java] viewplaincopy1.@Entity   2.    public class User {   3.       private List books;   4.       @ManyToMany(targetEntity=package.Book.class)   5.       public List getBooks() {   6.           return books;   7.       }   8.       public void setBooks(List books) {   9.           this.books=books;   10.       }   11.    }      1.  2.    @Entity   3.    public class Book {   4.       private List users;   5.       @ManyToMany(targetEntity=package.Users.class, mappedBy="books")   6.       public List getUsers() {   7.           return users;   8.       }   9.  10.       public void setUsers(List users) {   11.           this.users=users;   12.       }    1.    }   2.  两个实体间相互关联的属性必须标记为@ManyToMany,并相互指定targetEntity属性, 需要注意的是,有且只有一个实体的@ManyToMany注解需要指定mappedBy属性,指向targetEntity的集合属性名称 利用ORM工具自动生成的表除了User和Book表外,还自动生成了一个User_Book表,用于实现多对多关联 再接再厉,解决第三个问题:本来想排一下序,怎么也这么难啊。难也得搞定是吧^_^,前面以为orderBy按字段来呢,结果一个文档,原来是被关联实体中一个属性,哎,细心还是好啊。再补充一点:orderby的方式对list是有效的,set和map用mapkey。 两个实体间相互关联的属性必须标记为@ManyToMany,并相互指定targetEntity属性, 需要注意的是,有且只有一个实体的@ManyToMany注解需要指定mappedBy属性,指向targetEntity的集合属性名称 利用ORM工具自动生成的表除了User和Book表外,还自动生成了一个User_Book表,用于实现多对多关联 以下列出基本用法解析:一对一关联@OneToOne一对一的主键关联实在看不出意义何在.反倒是获取实例的时候可能多N多没用的数据,所以不深究了...至于外键关联,直接看下面的一对多,多对一.一对多,多对一关联 表字段说明OneObject表:one_id主键ManyObject表:many_id主键one_id外键,与OneObject的主键关联单向一对多OneObject:@OneToMany@JoinColumn(name="one_id")privateSetmb=newHashSet();ManyObject: privateintone_id; //这个就是和@JoinColumn(name="one_id")对应的one_id.不需要注解.单向多对一OneObject:不需要注解.ManyObject:@ManyToOne@JoinColumn(name="one_id") //只需要在ManyObject指定外键为one_id.它就会去找OneObject的主键来对应.privateOneObjectone;双向一对多,双向多对一OneObject:@OneToMany(mappedBy="one") //告诉hibernate关联去找one. privateSetmb=newHashSet();ManyObject:@ManyToOne@JoinColumn(name="one_id") //注意,在这里指定外键名后,不要在写privateintone_id;和它的get/set方法了.这个改由hibernate维护.写上是要报错的.privateOneObjectone; //这个对应的就是@OneToMany(mappedBy="one")的one.多对多关联表字段说明ManyA表:a_id主键ManyB表:b_id主键 A_B表:(保存映射关系的中间表)t_Aid外键,与ManyA的主键关联t_Bid外键,与ManyB的主键关联单向多对多ManyA:@ManyToMany@JoinTable(name="A_B",//中间表名joinColumns={@JoinColumn(name="t_Aid")}, //设置ManyA自己在中间表的对应外键inverseJoinColumns={@JoinColumn(name="t_Bid") //设置对方(ManyB)在中间表的对应外键})privateSetmb=newHashSet(); ManyB:不需要注解.双向多对多ManyA:@ManyToMany@JoinTable(name="A_B", //中间表名joinColumns={@JoinColumn(name="t_Aid")}, //设置ManyA自己在中间表的对应外键inverseJoinColumns={@JoinColumn(name="t_Bid") //设置对方(ManyB)在中间表的对应外键})privateSetmb=newHashSet(); ManyB:@ManyToMany(mappedBy="mb") //告诉hibernate维护这个关联去找另一个对象的注解就可以了.不需要重复写.privateSetma=newHashSet();注:以上注释,ManyA的更删会影响到中间表A_B.但ManyB的更删不会影响到.假如2边都需要影响A_B表,则ManyB也写注解.注意joinColumns以及inverseJoinColumns的值对应不同.(其实就是两边都做成单向多对多)ManyB:@ManyToMany@JoinTable(name="A_B", joinColumns={@JoinColumn(name="t_Bid")}, inverseJoinColumns={@JoinColumn(name="t_Aid") })privateSetma=newHashSet();

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭