Hibernate: таблица линкеров многие ко многим, лучший дизайн OO - PullRequest
0 голосов
/ 12 ноября 2011

Если у меня есть 3 таблицы с ожидаемыми обычными столбцами: Customer , CustomerProductLinker и Product .

И я хочу, чтобы в моем Java-коде это было:

Customer customer =  myService.getCustomer(id); //calls hibernate session
List<Product> customerProducts = customer.getProducts();

Как будут выглядеть мои 3 сущности и соответствующие коллекции внутри каждой, в частности метод getProducts()? Или для этого лучше использовать HQL и именованный запрос для этого?

Я создаю таблицы базы данных из кода Java (используя опцию create в hibernate conf), поэтому при желании можно изменить структуру таблицы.

Ответы [ 2 ]

1 голос
/ 12 ноября 2011

Попробуйте @ManyToMany отношение, используя @JoinTable. У клиента есть набор (или список) продуктов. У продукта есть набор (или список) клиентов.

@Entity
public class Customer {
    @ManyToMany(cascade= CascadeType.ALL)
    @JoinTable(name="customer_product",
               joinColumns={@JoinColumn(name="customer_id")},
               inverseJoinColumns={@JoinColumn(name="product_id")})
    private Set<Product> products = new HashSet<Product>();
    ...

@Entity
public class Product {
    @ManyToMany
    @JoinTable(name="customer_product",
               joinColumns={@JoinColumn(name="product_id")},
               inverseJoinColumns={@JoinColumn(name="customer_id")})
    private Set<Customer> customers = new HashSet<Customer>();
    ...
0 голосов
/ 12 ноября 2011

Я бы настроил сущности, как предложил Ванник. Постарайтесь сделать это простым. Если вы начинаете использовать именованные запросы, вы выполняете больше работы и просто освещаете конкретный случай.

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