#java #hibernate #jpa #orm
#java #переход в спящий режим #jpa #orm
Вопрос:
В моей базе данных у меня есть, Food
которая имеет отношение «многие ко многим» с другим ингредиентом Foods
. Эта взаимосвязь представлена как таковая…
=============Foods============ ==========Ingredients===========
| Id | Name | Description | | FoodId | IngredientId | Amount |
============================== ================================
| 1 | Ice Cream | ........... | | 1 | 2 | 300 |
------------------------------ --------------------------------
| 2 | Milk | ........... |
------------------------------
Однако в модели предметной области наиболее логичной структурой данных было бы отображение Foods
и сумм. В конечном счете, когда я загружаю «Ice Cream», мне нужно, чтобы карта содержала все ингредиенты Foods
(найденные в таблице ингредиентов) вместе с соответствующим значением, но у меня возникли проблемы с выяснением, как это сделать.
@Entity
@Table(name="Foods")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="Id")
private int id;
@Column(name="Name")
private String name;
@Column(name="Description")
private String description;
@ManyToMany ???
private Map<Food, Integer> ingredients;
Комментарии:
1. Вы пробовали использовать
@OneToMany
?2. @jbx Я думаю,
@ManyToMany
в конечном итоге это будет базовая аннотация, но отображение кажется более сложным. Я предполагаю, что проблема, с которой я сталкиваюсь, больше связана с получением объекта » Еда » на карте на основе идентификатора из таблицы ингредиентов.3. Ммм … честно говоря, я бы не стал подходить к этому таким образом. Проверьте мой грубый набросок ответа ниже, посмотрите, имеет ли это смысл.
Ответ №1:
Сначала я бы создал новую сущность Ingredient
, которая имеет составной ключ, состоящий из обоих внешних ключей вместе с amount
целым числом. Вы можете использовать Food
непосредственно в качестве типов полей для обоих внешних ключей.
Затем в вашей Food
сущности вы можете добавить @OneToMany
Set<Ingredient>
отображение id
на Ingredient
‘s foodId
. После этого вы сможете легко получить все Ingredient
записи для одной Food
.
Комментарии:
1. Сможет ли Hibernate неявно сопоставлять числовое значение
FoodId
сFood
объектом?2. Да, если только у вас не происходит что-то странное.