Подобно тому, как место может содержать другой запас, но в данное время в нем находится только один запас, и это место содержит только этот запас
Вам немного неясно, но если Я правильно понял, вы говорите о ситуации, когда только одна акция может находиться в определенном 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
для нескольких различных объяснений и деталей использования во всех этих трех аннотациях.