JPA: синтаксис таблицы соединений - PullRequest
5 голосов
/ 15 ноября 2010

Учитывая следующую сущность (некоторые столбцы опущены в этом длинном определении для краткости):

@Table(name = "Products")
public class Products implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "SKU")
    private String sku;
    @Basic(optional = false)
    @Column(name = "ProductName")
    private String productName;

    private boolean allowPreOrder;
    @ManyToMany(mappedBy = "productsCollection")
    private Collection<Categories> categoriesCollection;
    @JoinTable(name = "Products_CrossSell", joinColumns = {
        @JoinColumn(name = "SKU", referencedColumnName = "SKU")}, inverseJoinColumns = {
        @JoinColumn(name = "CrossSKU", referencedColumnName = "SKU")})
    @ManyToMany
    private Collection<Products> productsCollection;
    @ManyToMany(mappedBy = "productsCollection")
    private Collection<Products> productsCollection1;
    @JoinTable(name = "Products_Related", joinColumns = {
        @JoinColumn(name = "SKU", referencedColumnName = "SKU")}, inverseJoinColumns = {
        @JoinColumn(name = "RelatedSKU", referencedColumnName = "SKU")})
    @ManyToMany
    private Collection<Products> productsCollection2;
    @ManyToMany(mappedBy = "productsCollection2")
    private Collection<Products> productsCollection3;

Как получить набор сопутствующих товаров для данного товара SKU?

Таблица products_related выглядит следующим образом:

alt text

Я знаю, как получить ответ, используя SQL, но я новичок в JPA, поэтому я еще не совсем понял API и синтаксис запроса.

1 Ответ

2 голосов
/ 15 ноября 2010

Мне кажется, здесь определены некоторые ненужные коллекции. В любом случае:

@JoinTable(name = "Products_Related", joinColumns = {
    @JoinColumn(name = "SKU", referencedColumnName = "SKU")}, inverseJoinColumns = {
    @JoinColumn(name = "RelatedSKU", referencedColumnName = "SKU")})
@ManyToMany
private Collection<Products> productsCollection2;

Эта часть (она присутствует в вашем коде) должна дать вам нужные продукты. Просто переименуйте его в relatedProducts и соответствующий установщик / получатель.

Обновление: Вы можете получить объект по:

Product p = entityManager.find(Product.class, yourProductId);
p.getRelatedProducts();

Получение менеджера сущностей зависит от вашей настройки, и лучшее место для поиска того, как его получить, - учебник.

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