将ID从查询转换为String

问题描述 投票:1回答:1

我有这个用于返回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。

你能给我一些建议怎么做吗?

java spring spring-boot mapping spring-rest
1个回答
1
投票

所以你想根据terminal_id检索terminal_name。你有几个选择:

1)如果terminal_nametemrminal_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;
}
© www.soinside.com 2019 - 2024. All rights reserved.