Отношения OneToMany в hibernate создают 4 таблицы - PullRequest
0 голосов
/ 10 февраля 2019

У меня проблема.У меня есть два класса с одинаковым отношением @OneToMany.Hibernate создает 4 таблицы: product, product_categorie, category, category.product.

В моем случае мне нужно только 3 таблицы: product, category и product_categorie.

Это моя диаграмма классов:

Class Diagram

Код, который я написал на Java:

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int product_id;
    private String naam, omschrijving;
    private double prijs;
    @OneToMany(mappedBy = "product_m")
    private List<Aanbieding> aanbiedingen;
    @OneToMany
    private List<Categorie> categories;
}

@Entity
public class Categorie {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int categorie_id;
    private String naam, omschrijving;
    @OneToMany
    private List<Product> producten;

}

В моем случае мне нужно архивировать следующее:

OneПродукт относится к 1 или более категориям

Одна категория содержит 0 или более продуктов

Я что-то не так сделал в коде?

Я впервые использую hibernate, надеюсь, вы понимаете.

1 Ответ

0 голосов
/ 10 февраля 2019

Адам,

Вам нужны отношения ManyToMany, а не OneToMany.Вместе с JoinTable для сопоставления отношений между продуктом и категориями.

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int product_id;
    private String naam;
    private String omschrijving;
    private double prijs;
    @OneToMany(mappedBy = "product_m")
    private List<Aanbieding> aanbiedingen;

    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
        name = "product_categories", 
        joinColumns = { @JoinColumn(name = "product_id") }, 
        inverseJoinColumns = { @JoinColumn(name = "categorie_id") }
    )
    private List<Categorie> categories;
}

@Entity
public class Categorie {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int categorie_id;
    private String naam;
    private String omschrijving;

    @ManyToMany(mappedBy = "categories")
    private List<Product> producten;

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