hibernate 单向关联&双向关联

多对一:

就是A表中的一个字段是B表的主键。多个A表中的数据可以对应一个B表中的数据,同理,一个B表中的数据可以同时对应多个A表中的数据。

 

单向关联与双向关联对数据表的要求其实是一致的。满足对应的关联要求即可,也就是A表中的一个字段是B表中的主键。

单向关联与双向关联的需求是不一样的。单向关联,只需要可以通过主表找到控表即可。这个很简单,通过简单的sql语句,select B from A where A.B=?即可。需要的配置也很简单,在A表的持久化类的映射文件中加入:

<class ......>
   <id....>
   ......
   <many-to-one name="B" class="com.bean.B">
       <column name="B"/>  <!--这个B是A表中B表的主键对应的外键名-->
   </many-to-one>
</class>

双向关联的需求是:能够通过A表找到B表,通过B表找到A表。怎么实现呢?

我们可以知道,单存的B表数据找到的是一批A表的数据,也就是A表数据对象的集合,当然,改变的不是数据库中的表,而是持久化类。B表的持久化类中加入一个A表的Set集合,将查询到的与B有关的数据放入该集合中,之后就可以通过其他的条件得到我们想要的对应A的信息了。

做法:

1、B持久化类中饭加入A的set集合以及对应get set方法

2、在B表的映射文件中加入Set信息以及一对多信息:

<set name="As" inverse="true">
  <key column="B.id"/>
  <on-to-many class="com.bean.A"/>
</set>

即可。

设置inverse属性只是设置维护关系而已,不是单向关联。单向关联是你在A类里面,可以访问到B类数据,借此就访问到B表的数据,但是在B类里面无法访问A类的数据,也就是访问不到A表的数据。双向是在B类里也可以访问A的数据。至于什么时候用,要看需要了,比如:班级表和学生表,对应的java类是班级类和学生类,假如我在显示学生信息的时候需要同时显示其所属的班级信息,那么就可以建立学生类到班级类的单向关联,如果我还想在显示班级基本信息的同时显示其所对应的学生信息,那么这时就可以建立双向关联了。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值