我有两张桌子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>
答案 0 :(得分:2)
ON条款:
select * from A join B on A.type = B.typeNumId
答案 1 :(得分:1)
使用column
元素的many-to-one
属性或等效嵌套column
元素声明外键的名称。来自文档:
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" />
- name:财产的名称。
- column(可选):外键列的名称。这也可以 由嵌套指定 元件(一个或多个)。
- class(可选 - 默认为由。确定的属性类型 反思):的名字 相关课程。
- cascade(可选):指定应该从哪个级联操作 父对象到关联的 对象。
- fetch(可选 - 默认选择):在outer-join之间选择 提取或顺序选择 取。
- update,insert(可选 - 默认为true):指定映射 列应包含在SQL中 UPDATE和/或INSERT语句。 将两者都设置为false允许纯粹 “派生”协会的价值是 从另一个属性初始化 映射到相同的列,或通过 触发器或其他应用程序。
- property-ref(可选):关联类的属性名称 加入这个外键。如果 未指定,主键 使用了相关的类。
- access(可选 - 默认为property):Hibernate使用的策略 用于访问财产价值。
- unique(可选):为DDL生成唯一约束 外键列。通过允许 这是一个目标 property-ref,你可以做到 关联多样性一对一。
- not-null(可选):启用DDL生成可空性 外键的约束 列。
- optimistic-lock(可选 - 默认为true):指定 是否对此属性进行了更新 要求获得乐观 锁。换句话说,它决定了 应该发生版本增量 这个属性很脏。
- lazy(可选 - 默认为代理):默认为单点 协会代理。 lazy =“no-proxy”指定 物业应该懒散地取出 实例变量是第一个 访问。这需要构建时间 字节码检测。懒惰=“假” 指定关联将 总是被热切地抓住。
- not-found(可选 - 默认为exception):指定外键的方式 引用缺少的行将是 处理。忽略会对待失踪 row作为空关联。
- entity-name(可选):关联类的实体名称。
- formula(可选):一个定义值的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>
答案 2 :(得分:0)
这样的东西?
LEFT JOIN B on A.field1 = B.field2
根据您的口味选择加入类型