Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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

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
Java 在Hibernate中映射到PK以外的其他字段_Java_Hibernate_Mapping_One To Many_Hibernate Onetomany - Fatal编程技术网

Java 在Hibernate中映射到PK以外的其他字段

Java 在Hibernate中映射到PK以外的其他字段,java,hibernate,mapping,one-to-many,hibernate-onetomany,Java,Hibernate,Mapping,One To Many,Hibernate Onetomany,我现在陷入困境,需要帮助 我想在hibernate中有两个字段之间的映射,这两个表中的任何一个都不是PK Table Category ( catId Numeric(10), categoryBusinessRef Numeric(10) ) Table Product ( productId Numeric(10), categoryBusinessRef Numeric(10) ) Sql查询将是: SELECT * from Categ

我现在陷入困境,需要帮助

我想在hibernate中有两个字段之间的映射,这两个表中的任何一个都不是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
我的hbms看起来像

<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>

S_类
S_产品
所以这是一个一对多的关系,但它必须与另一个值映射,作为类别的PK

谢谢你的帮助

编辑:


如果我做不到,好吧!但是如果我可以,我想这样做,我知道主键的所有内容,但我的问题不是“在Hibernate中映射PK”,而是“在Hibernate中映射PK以外的另一个字段”,所以说映射到PK的答案我不感兴趣:p

你的模型是错误的,除非你想要笛卡尔乘积(这是一个罕见的要求)您应该始终通过主键加入

您可以有一对一、一对多或多对多的关系(后两种更常见)

在一对多模式中,您需要
one
侧在
many
侧的主键

在许多情况下,您可能需要一个关系表来进行映射

假设您想要,您希望多个
B
连接到相同的
A
(一对多)

现在您可以查询

SELECT * 
FROM a 
JOIN b ON b.a_id = a.id

并从
a
中恢复所有光盘,并与所有
b
建立正确的关系,我猜表
a
是一个单一关系的
1
端,对吗?然后,表
A
中的属性
disc
是错误的。我没有选择商品名称。我想,我会重命名这些变量。这不是好名字或坏名字的问题。我的假设是正确的吗?是的,是正确的,但这些不是唯一的,而是更多的多对多索引是的,但我需要映射到其他领域,因为数据库的历史记录,每次更新都需要一个新的记录,因此有一个行Id和一个业务数据表示Id,但在很多情况下,您必须映射到某些不是主键的值(例如,在大数据中)@GillesBodart PK必须唯一标识元组,因此所有映射都由PK完成,只能对非PK字段应用限制操作。大数据不一定使用关系数据库。我知道,但我的问题不是这样做是否好:)我的问题是如何做到;-)@GillesBodart让我们知道您是如何在不更改表结构(包括添加索引)的情况下使其工作的。
SELECT * 
FROM a 
JOIN b ON b.a_id = a.id