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

#java #spring #hibernate

#java #весна #спящий режим

Вопрос:

Существует множество родительских таблиц и БЛОК дочерних таблиц. Теперь я хочу, чтобы LOT -> lot_id был внешним ключом для таблицы БЛОКОВ. и есть два вызова API, которые я делаю, чтобы ПОЛУЧИТЬ / ОПУБЛИКОВАТЬ для ЛОТА и БЛОКА.

api / park /lots и api / park /blocks

Когда я создаю запись для БЛОКА (api / park / blocks), она создается. Но когда я вызываю api GET (api / park / lots) через LOT, я не могу получить дочернюю (БЛОКОВУЮ) запись

Ниже приведен пример json

{ «lot_id»: «1001», «name»: «NEWLOT»,

 "parkingBlocks": [],
"availability": {
    "available_spots": 50,
    "occupied_spots": 2,
    "unknown_spots": 0,
    "competitors": 0
}
 

}

Хотя у меня есть блок идентификатора «2001» для партии «1001» в запросе GET, который невозможно получить

Объект LOT code @Id частная строка lot_id; имя частной строки = «»;

 @OneToMany(targetEntity = ParkingBlock.class,cascade = CascadeType.ALL, orphanRemoval = true)
private List<ParkingBlock> parkingBlocks = new ArrayList<>(); 
 

Сущность БЛОКА
@Id
частная строка block_id блока;

 //THIS IS THE FOREIGN KEY I CREATED MANUALLY
@OneToOne(targetEntity = ParkingLot.class, cascade = CascadeType.ALL, optional = false)
@JoinColumn(name = "lot_id")
private String lot_id;


@ManyToOne(targetEntity = ParkingLot.class, cascade = CascadeType.ALL, optional = false)
private ParkingLot parkingLot;

//accessors
 

code

Идентификатор лота не сохраняется в базе данных

Ответ №1:

Подумайте о том, чтобы сделать это:

  • Добавьте @JoinColumn в отношения в other, чтобы ORM знал, как можно выполнить соединение между таблицами.
  • Чтобы сохранить обе таблицы, попробуйте установить в каждом экземпляре БЛОКА экземпляр LOT, чтобы ORM обнаружил, что обе сущности связаны, и сначала вставил LOT, а затем использовал идентификатор LOT, используемый в БЛОЧНОЙ сущности