我有这个休息点,用于返回ID:
@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查询将terminal_id转换为终端名称?
我需要这样的东西:
...... map(mapper :: toNewDTO)->在此处找到terminal_id并进行另一个SQL查询,以查找与该terminal_id相关的名称,并返回终端名称NOT terminal_id。
您能给我一些建议吗?
答案 0 :(得分:1)
因此,您要基于terminal_id检索terminal_name。 您有两种选择:
1)如果terminal_name
与temrminal_id
位于同一数据库表中,则应将其装入ContractNewDTO
中的mapper::toNewDTO
内部,您可以实现使用terminal_name
而不是temrminal_id
。
2)如果termminal_name
在另一个表(例如terminaldetails表)中,并且您需要该表中的所有数据,则可以创建映射(例如,在terminal_id
上连接的OneToOne)。 Here是一位优秀的作者撰写的有关如何进行OneToOne映射的文章。
3)另一个选择是使用@SecondaryTable。假设您当前的实体是TerminalEntity,并且它具有列terminal_id
并映射到表“ terminal”。 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;
}