Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用不同的联接列名联接两个表_Sql_Hibernate_Orm_Join_Hibernate Mapping - Fatal编程技术网

Sql 使用不同的联接列名联接两个表

Sql 使用不同的联接列名联接两个表,sql,hibernate,orm,join,hibernate-mapping,Sql,Hibernate,Orm,Join,Hibernate Mapping,我有两个带有多对一映射/关联的表A->B 表B的主键是表A中的外键 问题是两个表中的列名不同。假设B有主键列“typeNumId”,它是表A中作为“type”的外键。如何连接此列上的两个表?我如何指定映射来指示表必须在本质上相同的“typeNumId”和“type”上连接 尤其是通过hibernate配置(hbm文件)可以实现吗 差不多 <many-to-one name="Type" class="com.domain.ProcedureType" update="false" inse

我有两个带有多对一映射/关联的表A->B

表B的主键是表A中的外键

问题是两个表中的列名不同。假设B有主键列“typeNumId”,它是表A中作为“type”的外键。如何连接此列上的两个表?我如何指定映射来指示表必须在本质上相同的“typeNumId”和“type”上连接

尤其是通过hibernate配置(hbm文件)可以实现吗

差不多

<many-to-one name="Type" class="com.domain.ProcedureType" update="false" insert="false" fetch="join" lazy="false">
    <column name="? <this is in questions? >" not-null="true" />
</many-to-one>

像这样的东西

LEFT JOIN B on A.field1 = B.field2
根据您的喜好选择加入类型

on子句:

select * from A join B on A.type = B.typeNumId

使用
多对一
元素的
属性或等效嵌套
元素声明外键的名称。从文件中:

5.1.12. 多对一 与他人的普通联系 持久类是使用 多对一元素。关系型 模型是一个多对一的关联;A. 一个表中的外键是 引用主键列 目标表的属性

<many-to-one
        name="propertyName"                                          (1)
        column="column_name"                                         (2)
        class="ClassName"                                            (3)
        cascade="cascade_style"                                      (4)
        fetch="join|select"                                          (5)
        update="true|false"                                          (6)
        insert="true|false"                                          (6)
        property-ref="propertyNameFromAssociatedClass"               (7)
        access="field|property|ClassName"                            (8)
        unique="true|false"                                          (9)
        not-null="true|false"                                        (10)
        optimistic-lock="true|false"                                 (11)
        lazy="proxy|no-proxy|false"                                  (12)
        not-found="ignore|exception"                                 (13)
        entity-name="EntityName"                                     (14)
        formula="arbitrary SQL expression"                           (15)
        node="element-name|@attribute-name|element/@attribute|."
        embed-xml="true|false"
        index="index_name"
        unique_key="unique_key_id"
        foreign-key="foreign_key_name"
/>

  • 名称:属性的名称
  • 列(可选):外键列的名称。这也可以是 由嵌套的 元素
  • 类(可选-默认为由 反射):反射的名称 关联类
  • 级联(可选):指定应该从 关联对象的父对象 反对
  • fetch(可选-默认为select):在外部联接之间进行选择 取数或顺序选择 吸引人
  • 更新、插入(可选-默认为true):指定 列应该包含在SQL中 更新和/或插入语句。 将两者都设置为false将允许纯 “派生”关联,其值为 从另一个属性初始化 映射到同一列,或通过 触发器或其他应用程序
  • property ref(可选):关联类的属性的名称 连接到此外键的。如果 未指定,则为 使用关联类
  • 访问(可选-默认为属性):Hibernate使用的策略 用于访问属性值
  • unique(可选):启用对的唯一约束的DDL生成 外键列。允许 这将成为一场战争的目标 属性ref,您可以使 关联多重性一对一
  • NOTNULL(可选):启用可空性的DDL生成 外键的约束 列
  • 乐观锁(可选-默认为true):指定 是否更新此属性 需要获得乐观的 锁换句话说,它决定了 当出现以下情况时,应出现版本增量: 这房子很脏
  • 惰性(可选-默认为代理):默认情况下,单点 关联是代理的。 lazy=“no proxy”指定 属性应在 实例变量是第一个 访问。这需要构建时间 字节码检测。lazy=“false” 指定关联将 总是被急切地吸引
  • 找不到(可选-默认为异常):指定外键 将删除缺少行的引用 处理。“忽略”将处理丢失的文件 行作为空关联
  • 实体名称(可选):关联类的实体名称
  • 公式(可选):定义公式值的SQL表达式 计算出的外键
  • 所以像这样的东西应该可以做到:

    <many-to-one name="Type" class="com.domain.ProcedureType" update="false" insert="false" fetch="join" lazy="false">
        <column name="type" not-null="true" />
    </many-to-one>
    
    
    
    参考文献
    • Hibernate核心文档

    我认为您的大部分XML示例都被html剥离弄丢了,请尝试将其缩进四个空格(或单击“代码”按钮)。实际上,我理解这个问题是关于如何编写映射的。@Pascal Thivent:当然。在提到Hibernate之前,我回答了这个问题,因为我不知道Hibernate,所以我不能真正地重新回答…;)啊,我没有注意到OP更新了问题。现在有道理了。