用户登录
用户注册

分享至

hibernate 多对一双向

  • 作者: 4112338
  • 来源: 51数据库
  • 2020-12-11
一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同。

它们的区别在于维护的关系不同:
一对多关联映射是指在加载一的一端数据的同时加载多的一端的数据多对一关联映射是指在加载多的一端数据的同时加载一的一端的数据



  首先有两张关联的表,类别表Category和展品表Product,一个类别对应多种展品,

category字段有 id(主键),name

product字段有 id(主键) name,price,c_id(这个就是外键)

在Category类中

private Integer id;
private String name;
private Set products=new HashSet();//注意这里不要只写private Set products,不然后面会出现问题的,因为在取集合的时候回返回null,这样是不行的

定义好属性后再分别生成对于的get/set方法

在Product类中
private Integer id;
private String name;
private Double price;
private Category category;

再分别生成对对应的get/set方法

在设置相应的.hbm.xml文件

在Category.hbm.xml文件中

















在Product.hbm.xml中



















这样就完成了

在这里还可以在
一方中设置 cascade属性





表示的级联,意思就是说主动方执行操作时,被关联的对象(被动方)是否要同步执行同一操作(在一对多的关联中,一般都是一方是主动方)
cascade有四个值:
none:什么也不做
save-update:一方进行添加和更新时(这个经常用)
all:所以操作
delete:
delete-orphan:

在一方中可以设置反转inverse="true"
控制反转,在一对多中让多方变为主动对象




  疼,双向好像是没区别吧, 反正双方都要加载



  

一段时间没用~不知道记的清楚不了~

数据库都一样~程序不一样~

比如 a  b~ 无论你是单项还是双向~你b表里都有个 字段 以a表 id或其他什么做为外键~

如果只单向关联~a one to many b~ 当hibernate查询a的时候回自动加载相关的b~ 用a.getborder()之类的就能得到b~(看你设置的方法是什么就是什么~打比方是getborder())

                                                       当查询b的时候~不会加载a~也就是说从b中是读不到a的~没有b.getaorder()之类的方法在b类里~

双向关联就是~查询a会自动加载b~用a类相应方法得到a类相应的b类~

                      同时查询b也会自动加载a类~用b类相应方法得到b类相应的a类~

差不多就这样~

软件
前端设计
程序设计
Java相关