Как создать промежуточную таблицу между двумя таблицами в Hibernate / JPA? - PullRequest
1 голос
/ 09 января 2020

Таблица 1: Таблица компьютеров

 @Entity
 @Table ("computer")
 public class Computer{
   private int id;
   .
 }

Таблица 2: Таблица лицензий:

 @Entity
 @Table ("licenses")
 public class Licnese{
   private int id;
   .
 }

Таблица 3: Будет создано. Это Intermediate, который должен иметь только два поля

Идентификатор компьютера | Идентификатор лицензии

Идентификатор лицензии может быть связан с несколькими идентификаторами компьютеров, а несколько идентификаторов компьютеров могут иметь несколько лицензий.

CompID | LicneseID  
      1|2
      1|2
      2|2

В нашем случае данные о компьютерах и лицензиях уже существуют. Мы выполняем задание, чтобы заполнить промежуточную таблицу, т.е. выбрать идентификатор компьютера, загрузить идентификатор lincense из службы отдыха, найти лицензию в существующей базе данных и создать запись в промежуточной таблице.

Как это должно быть сделано?

  1. Вставить независимо или

    промежуточный класс {private int compid private int liceid}

, но в этом первичном ключе требуется то, чего клиент не хочет.

обновить с помощью объекта «Компьютер» или «Лицензия», если да, то как?

Я понимаю, что нам нужно использовать ElementCollection в объекте "Компьютер", но как также ссылаться на идентификатор лицензии?

@ElementCollection(targetClass = Intermediate.class)
    @CollectionTable(name = "Intermediate", joinColumns = @JoinColumn(name = "ID"))
    @AttributeOverrides({
        @AttributeOverride(name = "license ID",column = @Column(name = "License ID")),
    private List<Intermediate> intermediate;

нам нужно объединить компьютерную сущность в этом случае?

Ответы [ 2 ]

0 голосов
/ 09 января 2020

Вы можете просто определить отношение @ManyToMany, и таблица соединения будет создана автоматически.

@ManyToMany
@JoinTable(
  name = "licence_computer", 
  joinColumns = @JoinColumn(name = "computer_id"), 
  inverseJoinColumns = @JoinColumn(name = "licence_id"))
private Set<Licnese> licences;
0 голосов
/ 09 января 2020

Согласно описанию, вы хотите использовать Hibernate. Как реализовать подход с использованием таблицы соединений, вы можете обратиться по ссылке, указанной ниже: http://fruzenshtein.com/hibernate-join-table-intermediary/

...