Какую аннотацию я должен использовать здесь? @OneToMany или @OneToOne? - PullRequest
0 голосов
/ 28 февраля 2020
class StockPlace{
    private Stock stock;
    private Place place;
}

Таким образом, этот класс описывает конкретную c акцию в указанном c месте, его можно изменить со временем. Как и в месте может быть другой запас, но в данный момент времени в нем находится только одна акция. и это место содержит только этот запас. У меня проблемы с определением аннотации, которую я должен использовать, кто-нибудь может помочь?

1 Ответ

1 голос
/ 28 февраля 2020

Подобно тому, как место может содержать другой запас, но в данное время в нем находится только один запас, и это место содержит только этот запас

Вам немного неясно, но если Я правильно понял, вы говорите о ситуации, когда только одна акция может находиться в определенном c месте?
Место может содержать другую акцию, но только после того, как исходная акция была удалена из этого места?
Я предполагаю, что StockPlace также будет своего рода сущностью, имеющей текущее место одной акции.

Если это так, то go с @OneToOne для обоих полей, так как он определяет отношения между классами, что только одна строка / запись StockPlace может существовать для Place и Stock и наоборот. Это означает, что при сохранении StockPlace необходимо использовать уникальный запас и уникальное место. Здесь, если вы попытаетесь сохранить StockPlace с местом или запасом, который уже был сохранен. вы получите исключение.

Аннотация @OneToMany над полем определяет отношение, в котором объекту, объявляющему поле с этой аннотацией, может быть сопоставлено много записей. В основном (если не только) ссылается на то, что класс может иметь коллекцию сопоставленных элементов.
Например, как описано здесь 1015 * одна корзина может содержать несколько элементов, поэтому он отображает List<Item> с @OneToMany или одна статья может иметь несколько комментариев.

Для покрытия случая, когда существует вероятность того, что более одного запаса будет в одном и том же месте, тогда поле места должно быть помечено @ManyToOne, поскольку это означает, что одна запись места может быть назначена многим StockPlace. записи (поэтому многие акции могут быть в одном месте).

Я думаю, у меня действительно нет такого варианта использования; P Поскольку в обоих случаях одно место может содержать как несколько, так и один запас, место может быть объявлено внутри класса Stock с помощью OneToOne для уникальной комбинации акции / места или ManyToOne, если в одном месте одновременно может быть несколько акций.

Взгляните на эти два сообщения SO:
настройка правильного сопоставления jpa для товаров и товаров в корзине
Hibernate ManyToOne против OneToOne
для нескольких различных объяснений и деталей использования во всех этих трех аннотациях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...