Отображение в Hibernate на другом поле, чем ПК

Я застрял на мгновение и мне нужна помощь.

Я хочу иметь отображение в спящем режиме между 2 полями, которые не являются 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 категории

Спасибо за помощь

РЕДАКТИРОВАТЬ:

Если я не могу сделать это хорошо! Но если я могу это сделать, я знаю все, что связано с первичным ключом, но у меня вопрос не в "Отображении в Hibernate на ПК", а в "Отображении в Hibernate на другом поле, отличном от ПК", поэтому ответы, которые сказали map мне ПК не интересует:p

1 ответ

Ваша модель неверна, если вы не хотите иметь декартово произведение (это редкое требование), вы всегда должны присоединяться по первичному ключу.

Вы можете иметь отношения один-к-одному, один-ко-многим или многие-ко-многим (последние два встречаются чаще).

В один ко многим вам нужен ПК из one сторона в many боковая сторона.

Во многих на май вам нужна таблица отношений, которая составляет отображение.

Предполагая, что вы хотите, вы хотите, чтобы много 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,

Другие вопросы по тегам