Как отобразить многие ко многим как вложенные вложенные объекты - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть словарная структура, которую нам нужно передать в веб-интерфейс.На данный момент он предоставляет различные значения для одного раскрывающегося списка и доступные значения для остальных раскрывающихся списков в зависимости от выбора первого

@Entity
@Table(name = "CAR")
@Data
public class Car{
  @Id
  @Setter(NONE)
  Long id;

  String name;

  @ManyToMany
  @JoinTable(name = "CAR_WHEELS",
        joinColumns = @JoinColumn(name = "CAR_FK"),
        inverseJoinColumns = @JoinColumn(name = "WHEEL_FK"))
  Set<Wheel> wheels;

  //some other similar sets
}

Теперь вдоль доступных значений мы хотим, чтобы для них было значение по умолчанию,поэтому мы думаем о чем-то вроде:

@Entity
@Table(name = "CAR")
@Data
public class Car{
  @Id
  @Setter(NONE)
  Long id;

  String name;

  AvailableValues availableValues;
  DefaultValues defaultValues;
}

, а затем

@Embeddable
class AvailableValues{
  Set<Wheels> wheels;
  //...
}

@Embeddable
class DefaultValues{
  Wheel wheel;
  //...
}

Но я не знаю, как справиться с картографической стороной этого.DefaultValues ​​должна быть простой и понятной, либо путем добавления этих значений в таблицу CAR, либо с помощью отношения один-к-одному вместо использования Embeddable, но не может придумать идеи для коллекций внутри объекта Embeddable, которые бы использовалиуже существующая структура.

1 Ответ

0 голосов
/ 19 декабря 2018

Я не уверен, правильно ли я понял вопрос, но схема БД будет сохранена, если сопоставление отношений будет просто перемещено в AvailableValues

@Embeddable
@Data
class AvailableValues {
    @ManyToMany
    @JoinTable(name = "CAR_WHEELS",
            joinColumns = @JoinColumn(name = "CAR_FK"),
            inverseJoinColumns = @JoinColumn(name = "WHEEL_FK"))
    Set<Wheel> wheels;
}

По желанию, если по какой-либо причине вы хотели изменитьчто отображение в охватывающей сущности, вы можете использовать @AssociationOverride

@Embedded
@AssociationOverride(name = "wheels",
        joinTable = @JoinTable(name = "MY_CAR_WHEELS",
                joinColumns = @JoinColumn(name = "MY_CAR_FK"),
                inverseJoinColumns = @JoinColumn(name = "MY_WHEEL_FK")
        )
)
AvailableValues availableValues;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...