JPA: ссылка на созданный JoinTable - PullRequest
0 голосов
/ 27 августа 2018

У меня есть две сущности: продукт и проход.Продукт может находиться в одном или нескольких проходах, а в проходе может быть один или несколько продуктов.

@Entity 
public class Product{
   @Id
   private Long id;
   private String name;
   @ManyToMany
   @JoinTable(name = "product_aisle",
            joinColumns = { @JoinColumn(name = "product_id") },
            inverseJoinColumns = { @JoinColumn(name = "aisle_id") })
    private Set<Aisle> aisles = new HashSet<>();
   /* getters, setters, equals and hashcode */
}


@Entity 
public class Aisle{
   @Id
   private Long id;
   private String row;
   private String shelf;
   @ManyToMany(mappedBy="aisles")
   private Set<Product> products = new HashSet<>();
   /* getters, setters, equals and hashcode */
}

И у меня есть последняя сущность: продавец.Продавец отвечает за продукт в проходе:

@Entity 
public class Salesman{
   @Id
   private Long id;

   private String name;

   /* ManyToOne to  ProductAisle ?*/

}

Вопрос : Как я могу связать продавца с автоматически созданной таблицей соединений (ProductAisle) с помощью "@ManyToOne"аннотация?

С уважением

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Чтобы представить Product в определенном Aisle, вам нужен другой объект.Это пример:

@Entity 
public class Product{
   @Id
   private Long id;
   private String name;
   @OneToMany(mappedBy = "product")
   private Set<ProductAisle> productAisle = new HashSet<>;
   /* getters, setters, equals and hashcode */
}


@Entity 
public class Aisle{
   @Id
   private Long id;
   private String row;
   private String shelf;
   @OneToMany(mappedBy = "aisle")
   private Set<ProductAisle> productAisle = new HashSet<>();
   /* getters, setters, equals and hashcode */
}

@Entity 
public class ProductAisle{
   @Id
   private Long id;
   @ManyToOne(fetch = FetchType.LAZY)
   private Product product;
   @ManyToOne(fetch = FetchType.LAZY)
   private Aisle aisle;
   /* getters, setters, equals and hashcode */
}

И тогда ваш Salesman будет указывать на коллекцию ProductAisle экземпляров, которая отображает продукт с проходом:

@Entity 
public class Salesman{
   @Id
   private Long id;

   private String name;

   @ManyToOne(fetch = FetchType.LAZY)
   private Set<ProductAisle> productAisle;

}
0 голосов
/ 27 августа 2018

Поскольку и Aisle, и Product имеют двунаправленное сопоставление друг с другом, вы можете присоединить любое из них (или даже оба) к классу Salesman, и вам не нужно присоединяться к таблице обслуживания ввсе.

...