Hibernate: отображение многих ко многим на карту - PullRequest
5 голосов
/ 01 декабря 2010

Я занимаюсь разработкой приложения, которое имеет дело с двумя следующими объектами: Продукты (назовем его X, Y, Z) и Материалы (a, b, c, ...).Известно, что у каждого продукта есть рецепт, в котором указано, какие материалы необходимы для его изготовления.Например, чтобы получить один X, нам нужно 2 a, 6 c и 4 d (X = 2a + 6c + 4d).

Вот как это отражается в таблицах базы данных:

Products
id INT
name VARCHAR
...

Materials
id INT
name VARCHAR
...

Recipes
product_id INT
material_id INT
count INT

Поле «count» в третьей таблице является коэффициентом для материалов того же вида (2, 6, 4 из примера).

Поэтому я хочу составить класс Product следующим образом:

public class Product {
    ...
    private Map<Material, Integer> recipe; // How many units of each material we need?
    ...
}

Есть ли способ получить все необходимые данные для карты рецептов, используя Hibernate?Отдельный подход к настройке (без аннотаций) является предпочтительным.

1 Ответ

9 голосов
/ 01 декабря 2010

Поскольку никто не опубликовал решение без аннотаций, я покажу решение с JPA 2.0 @ElementCollection аннотацией:

@ElementCollection
@CollectionTable(name = "Recipes", 
    joinColumns = @JoinColumn(name = "product_id"))
@MapKeyJoinColumn(name = "material_id")
@Column(name = "count")
private Map<Material, Integer> recipe;

Также обратите внимание, что, поскольку класс значений вашей карты равен Integer, решениебез аннотаций, скорее всего, будет задокументировано как «отображение коллекции», а не «отображение отношения сущности».

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