Отображение дополнительных атрибутов в соединительной таблице JPA 2 - PullRequest
7 голосов
/ 22 марта 2012

Я пытаюсь смоделировать эту связь, следуя этой ссылке http://www.javaworld.com/javaworld/jw-01-2008/images/datamodel.gif

Это обычное отношение «многие ко многим» между Заказом и Продуктами, но я не знаю, как добавить дополнительные столбцы в таблицу Присоединения.

@Entity
@Table(name = "Orders")
public class Order {
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "ORDER_LINES", joinColumns = { @JoinColumn(name = "ORDER_ID") }, inverseJoinColumns = { @JoinColumn(name = "PROD_ID") })
    private Set<Product> products;
}

@Entity
@Table(name="PRODUCTS")
public class Product {
    @ManyToMany(mappedBy="products")
    private Set<Order> orders;
}

Как добавить дополнительный атрибут Join Table в JPA 2.0?

Спасибо

1 Ответ

22 голосов
/ 22 марта 2012

В JPA отсутствует концепция наличия дополнительного постоянного атрибута в отношении (2.0). Вот почему связь со свойством на самом деле является промежуточной сущностью.

Как для сущностей Заказа, так и для Продуктов вам необходимо отношение «один ко многим» с новой сущностью. Из-за двунаправленных отношений, новая сущность будет иметь отношения многие к одному с Заказом и Продуктом.

Вы должны пойти на что-то вроде этого (показывает только отношения, идентификаторы и другие сопоставления удалены):

@Entity
@Table(name="order_item")
public class OrderItem {
    @ManyToOne
    private Order order;
    @ManyToOne
    private Product product;
}

@Entity
public class Order {
    @OneToMany (mappedBy = "order")
    private Set<OrderItem> orderItems;
}

@Entity
public class Product {
    @OneToMany(mappedBy = "product")
    private Set<OrderItem> orderItems;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...