`
lushuaiyin
  • 浏览: 718541 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate多对一双表关联配置属性理解

 
阅读更多
         <many-to-one name="odsPhotoBack" 
          column="emp_id" 
          class="org.hd.login.model.OdsPhotoBack" 
          update="false" 
		  insert="false" 
		  cascade="none"
		  not-found="ignore"
		  lazy="no-proxy"
		  outer-join="true"
          not-null="true"/>
         <many-to-one name="manage_person" 
          column="manage_person" 
          class="org.hd.business.device.model.DeviceOwnerVo" 
          property-ref="emp_id"
          update="false" 
		  insert="false" 
		  cascade="none"
		  not-found="ignore"
		  lazy="no-proxy"
		  outer-join="true"
          not-null="true"/>



假设有table_a,

字段:aid,aname,ref_b_fk

对应pojo类VO_A。

属性:aId,aName,rEf_b_fk, (VO_B类型) vob

table_b,

字段:bid,bname,bother

对应pojo类VO_B。

属性:bId,bName,bOther

在VO_A的hibernate文件中配置

<many-to-one

name="vob"
column="ref_b_fk"
class="VO_B"
update="false"
insert="false"
cascade="none"
not-found="ignore"
lazy="no-proxy"
outer-join="true"
not-null="true"/>

其中column是数据库字段,不是pojo属性名。(虽然大部分情况下,我们把数据库字段和pojo属性名写的一样,但是还是要弄清楚这里写的是哪个值)

name就是主pojo即VO_A中的属性vob,这个属性类型是class="VO_B" 。

假如我们要查询VO_A列表(where条件这里就不写了),这个配置最后生成的sql是:

1,select * from table_a

2,根据1的结果集实行遍历,每条结果取出字段column="ref_b_fk" 的值就叫 temp_v_a,

然后select * from table_b where (table_b主键)=temp_v_a。这里默认就是以table_b中主键做关联的。

结果集必然是一条记录,这个记录对应类VO_B赋值给VO_A中的属性VO_B vob。

这样这个属性就有值了。

如果我们在两张表关联时,即select *from table_b where (table_b主键)=temp_v_a。不想让table_b中主键做关联,

那需要设置关联字段,使用property-ref="table_b某字段"。这样生成的sql就是


1,select * from table_a

2,根据1的结果集实行遍历,每条结果取出字段column="ref_b_fk" 的值就叫 temp_v_a,

然后select * from table_b where (table_b关联字段)=temp_v_a。

结果集必须是一条记录,这个记录对应类VO_B赋值给VO_A中的属性VO_B vob。

如果不能保证结果集是一条记录,那本身就不是VO_A(多)---VO_B(一)的映射关系。

要么你的逻辑设计有问题,要么你的数据库确实存在着垃圾数据破坏了这样的关系。

所以property-ref的使用是有前提的,必须保证多对一关系,或者使用外键保证,或者你想其他办法保证。


分享到:
评论

相关推荐

    struts+hibernate+jdbc双表查询

    在双表查询中,Hibernate可以通过一对多、多对一或多对多的关系映射,实现两个表之间的关联查询,无需编写繁琐的SQL语句。 JDBC(Java Database Connectivity)是Java标准API,用于连接和操作数据库。虽然Hibernate...

    hibernate 一对多 增删改差

    在Java的持久化框架Hibernate中,"一对多"(One-to-Many)关系是一种常见的实体关联类型,它代表了一个实体可以与多个其他实体相关联。本篇将详细讲解如何使用Hibernate处理这种关系,并涵盖增、删、改、查(CRUD)...

    spring+struts2+hibernate框架双表增删改查

    通过@ManyToOne注解,可以定义User类中的Role属性,表示用户与角色的一对多关系。然后,通过Hibernate的Session接口进行CRUD操作,结合Spring的事务管理,确保数据的一致性。 此外,Struts2的Action类将处理HTTP...

    Struts+Hibernate增删改查

    因项目还在开发,所以本人只拿出一块单独的struts+hibernate增、删、改、查来演示,具体的一些包一看就知道; 项目直接在MyEclipse6.0运行,环境是里面自带的,用过的人都知道。本人测试没有问题。 具体的页面...

    EXCEL双表核对工具

    EXCEL双表核对工具 EXCEL双表核对工具

    Struts、hibernate、jquey、oracle项目整合

    双表操作可能涉及到一对多、多对一等关联;多表操作则可能涵盖多对多关联,需要理解联合主键、中间表等概念。 在实际项目中,整合这些技术的关键在于配置和协调。例如,Struts 需要配置 Action 映射和结果页面,...

    execl 双表核对工具

    在Excel中进行双表核对是一项常见的数据处理任务,尤其在大数据分析、财务审计或数据库管理等领域中。Excel的双表核对工具可以帮助用户高效地比较两个表格之间的数据,找出匹配项、不匹配项以及差异。下面将详细介绍...

    双表找正的基本方法.doc

    双表找正法是一种常用的联轴节找正方法,它通过使用两块百分表分别测定连轴节径向和轴向的找正情况。本文将对双表找正法的基本方法进行详细的解释和介绍。 一、双表找正法的步骤 双表找正法分为两步进行。第一步是...

    MapReduce常用算法11

    MapReduce常用算法11 - 双表关联、排序、去重、过滤 MapReduce是一种编程模型,广泛应用于大数据处理领域。其中,双表关联、排序、去重、过滤是常用的MapReduce算法。下面,我们将详细介绍这些算法的实现原理和...

    android 双表头表格

    在Android开发中,实现双表头表格是一种常见的需求,尤其在数据展示时,为了清晰地组织和呈现复杂信息,双表头表格可以提供更直观的视图。标题“android 双表头表格”和描述“android 横竖双表头表格”表明我们将...

    Java MyBatis 关系映射 一对一关系

    本话题主要关注MyBatis中的一对一关系映射,这是一种常见的数据库关联关系,用于描述一个实体与另一个实体之间的对应关系。 一对一关系映射在数据库设计中意味着一个表中的记录唯一对应另一个表中的记录。例如,...

    RecyclerView双表联动

    使用RecyclerView实现双表联动效果,点击左侧分类后右侧数据改变,滑动右侧列表时左侧分类跟随变动~ 如有不懂可在我该篇博客内留言,博客地址:https://blog.csdn.net/qq_20451879/article/details/81664188

    ssm双表加权限适合初学者

    ssm双表加权限适合初学者!!!!!!!!!!!!!!!!!!!!!! ssm框架双表加权+数据库事oracle限适合初学者!!!!!!!!!!!!!!!!!!!!!! ssm框架双表加权限适合初学者!!!!!!!!!!!!!!!!!!!!!! ssm框架双表加权限适合初学者!!!!!!!!!!!!...

    在数据库中采用双表结构表述地震前兆数据结构的方法研究.pdf

    地震前兆观测涉及多个学科,包括电磁学科、地下流体学科、形变学科等,而观测数据的种类和构成也十分繁杂。这些数据的结构标准化是制定地震前兆观测数据结构标准时遇到的主要难题之一。 为了解决这一问题,提出了...

    双表头表格

    在Android开发中,"双表头表格"是一种常见的数据展示方式,它允许用户在单一视图中同时看到两层分类信息,通常是垂直列标题和水平行标题,这为复杂的数据组织提供了清晰的视觉结构。这种设计尤其适用于需要展示多...

    Android例子源码支持横竖滑动的双表头表格.zip

    这个源码实例为Android开发者提供了一种创建动态、交互性强的双表头表格的方法,涵盖了自定义视图、数据绑定、滚动事件处理等多个关键领域,对于学习和理解Android高级UI定制具有很高的参考价值。

    ACCESS 双表自动查询数据(下拉列表框)

    通过上述步骤,我们能够构建一个交互性强且高效的双表自动查询系统。在ACCESS中,这样的设计不仅可以提高数据操作的便捷性,还能帮助用户快速找到所需信息,尤其适用于需要关联查询的业务场景。记得在实际应用中,要...

    自编万用表(34401A)联机电压读数记录软件(支持双表)

    “双表记表”功能是这款软件的一个亮点,它可以同时连接并控制两台34401A仪表,这对于需要比较或同步测量多个电气参数的场合非常有用。例如,在电路调试、电源性能测试或者多通道信号分析时,这一特性可以极大地提高...

Global site tag (gtag.js) - Google Analytics