Отображение в 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
,