Конвертировать идентификатор из запроса в строку - PullRequest
1 голос
/ 29 марта 2019

У меня есть точка отдыха, которая используется для возврата идентификаторов:

@GetMapping("{id}")
    public ResponseEntity<?> get(@PathVariable String id) {
        return contractService
                .findById(Integer.parseInt(id))
                .map(mapper::toNewDTO)
                .map(ResponseEntity::ok)
                .orElseGet(() -> notFound().build());
    }

DTO:

public class ContractNewDTO {
    .....   
    private Integer terminal_id;
    ....
}

Как я могу перевести терминал_ид в имя терминала, используя второй запрос SQL?

Мне нужно что-то вроде этого:

...... map (mapper :: toNewDTO) -> получить здесь Terminal_id и сделать еще один SQL-запрос, чтобы найти, какое имя относится к этому Terminal_id, и вернуть имя терминала НЕ Terminal_id.

Можете ли вы дать мне несколько советов, как это сделать?

1 Ответ

1 голос
/ 01 апреля 2019

Итак, вы хотите получить имя терминала по номеру терминала. У вас есть несколько вариантов:

1) Если terminal_name находится в той же таблице базы данных, что и temrminal_id, то она должна быть загружена в ContractNewDTO в вашем mapper::toNewDTO, вы можете реализовать логику преобразования, которая использует terminal_name вместо temrminal_id .

2) Если termminal_name находится в другой таблице (например, таблица Terminaldetails), и вам потребуются все данные из этой таблицы, то вы можете создать отображение (например, OneToOne, присоединенный к terminal_id). Здесь - отличное письмо о том, как выполнять сопоставление OneToOne от самого мастера.

3) Другой вариант - использовать @SecondaryTable. Допустим, ваша текущая сущность - TerminalEntity, имеет столбец terminal_id и сопоставлена ​​с таблицей «терминал». terminal_name находится в другой таблице "Terminaldetails".

Что вы можете сделать:

@Entity
@Table(name = "terminal")
@SecondaryTable(name = "terminaldetails")
public class TerminalEntity {
     @Id
     @GeneratedValue
     private Long id;

     @Column(name = "terminal_id")
     private String terminalId;

     @Column(name = "terminal_name", table = "terminaldetails")
     private String terminalName;
}
...