Как указать составной первичный ключ при определении пользовательского интерфейса как JpaRepository? - PullRequest
0 голосов
/ 30 мая 2020

У меня есть два класса Entity со следующими атрибутами:

class Parent {
    @Id
    string columnA;

    string columnB;
}

class Child {
    //confused here: ManyToOne with Parent class

    string columnC;
    string columnD;
}

Я хочу SQL Таблицы, как показано ниже:

  1. Parent (columnA (Primary Key), columnB)
  2. Дочерний (столбец A (Внешний ключ), столбец C, столбец D), где
    • первичный ключ = (столбец A, столбец C) и
    • (Дочерний - > ManyToOne -> Parent).

Question1: Как я могу создать правильный класс Entity для ребенка?

Question2: Я хочу иметь childRepository, расширяющий JpaRepository. Я запуталась, как указать составной первичный ключ?

public interface childRepository extends JpaRepository<Child, 'What to write here?'>{
}

1 Ответ

1 голос
/ 30 мая 2020

Вопрос-1: Зависит от вашего бизнеса c. Вопрос-2: Создайте новый класс для хранения идентификаторов дочерних объектов

@Embeddable
public class ChildId implements Serializable{

   private String columnA;
   private String columnC;

   // getters and setters
}

В дочернем классе:

@EmbeddedId
private ChildId childId;

@MapsId(value = "columnA")
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "columnA")
private Parent parent;

В вашем ChildRepository:

public interface ChildRepository extends JpaRepository<Child, ChildId>{}

PS: можно применять другие способы согласно бизнес-логу c

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