我现在卡住了一会儿,我需要一些帮助。
我想要在两个表中任何一个都不是PK的两个字段之间进行休眠映射
Table Category (
catId Numeric(10),
categoryBusinessRef Numeric(10)
)
Table Product (
productId Numeric(10),
categoryBusinessRef Numeric(10)
)
Sql查询将是:
SELECT *
from Category as a
Join Product as b on a.categoryBusinessRef = b.categoryBusinessRef
但是在Hibernate中它使我成为了这个映射
SELECT *
from Category as a
Join Product as b on a.categoryId = b.categoryBusinessRef
我的朋友看起来很喜欢
<class name="Category" table="A">
<id name="categoryId" length="10">
<column name="categoryid" />
<generator class="sequence">
<param name="sequence">S_category</param>
</generator>
</id>
<set name="categoryBusinessRefs" table="B" >
<key>
<column name="categoryBusinessRef" />
</key>
<one-to-many class="ProductClass" />
</set>
</class>
<class name="Product" table="B">
<id name="productId" length="10">
<column name="productid" />
<generator class="sequence">
<param name="sequence">S_product</param>
</generator>
</id>
<property name="categoryBusinessRef" length="10">
<column name="categoryBusinessRef" />
</property>
</class>
所以它是一对多的关系,但它必须与另一个值映射为类别的PK
感谢您的帮助
编辑:
如果我不能那样做的话!但是,如果我能够这样做,我知道主键的所有内容,但我的问题不是&#34;在Hibernate上映射PK&#34;但是&#34;在Hibernate中映射到另一个字段而不是PK&#34;,所以说地图到PK的答案对我不感兴趣:p
答案 0 :(得分:1)
你的模型是错误的,除非你想要一个笛卡尔积(这是一个罕见的要求),你应该总是用主键加入。
您可以拥有一对一,一对多或多对多的关系(最后两种更为常见)。
在一对多中,您需要one
方many
方的pk。
在许多人中,你需要一个能够进行映射的关系表。
假设您希望许多B
连接到同一A
(所以一对多)。
CREATE TABLE a (
id NUMERIC(10) PRIMARY KEY,
disc NUMERIC(10) NOT NULL
)
CREATE TABLE b (
id NUMERIC(10) PRIMARY KEY,
a_id NUMERIC(10) NOT NUL REFERENCES a (id)
)
现在您可以查询
SELECT *
FROM a
JOIN b ON b.a_id = a.id
并从a
中恢复所有光盘,并与所有b
保持适当的关系。