两列上的Hibernate和复杂多对一

时间:2011-07-11 18:32:26

标签: java hibernate

我有一个BUSINESS表,如下所示:

BUSINESS_ID | BRN | CODE | PARENT_ID

Business可以有一个parentBusiness,可以从child.parent_id->parent.brn and child.code->parent.code加入,可以通过查询表示:

select * from business childbus left join business parentbus on childbus.parent_id=parentbus.brn and childbus.yppa_code=parentbus.yppa_code where childbus.business_id=?

如何为business.parentBusiness创建多对一关系?以下多对一映射会创建从PARENT_IDBRN的链接,但如何从CODE列中获取约束?

<many-to-one name="parentBusiness" class="Business" column="PARENT_ID" property-ref="brn"/>

修改

在下面的答案中建议我尝试使用formula。根据文档,公式需要返回对象的PK,它将弄清楚如何填充自己。这是我在的地方:

<many-to-one name="parentBusiness">
    <formula>(select parentBusiness.business_id from business parentBusiness where parentBusiness.brn=parent_id and parentBusiness.code=code)</formula>
</many-to-one>

但是这会产生一个sql错误

...
from Business business0_
left outer join Business business1_ on
    (select parentBusiness.business_id from business parentBusiness where parentBusiness.brn=business0_.parent_id and parentBusiness.code=business0_.code)=business1_.BUSINESS_ID

因为,当然

ORA-01799: a column may not be outer-joined to a subquery

我的公式应如何设置?

非常感谢提前。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用公式属性。 here是关于如何使用它的一些文档...

答案 1 :(得分:1)

我无法像原始问题中所说的那样使这种复杂的关系发挥作用。但是,我能说服管理层这是一个糟糕的数据模型。