使用Post方法使用容器实体将值传递给实体列表时出错

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

我想将火车实体列表传递给使用RouteDto和TrainDto的路线实体。但是火车数据不会持久保存在db中。我也希望ID是自动生成的。我在控制器类中使用post方法,并使用RouteService从存储库中调用save方法。

RouteDto.java

public class RouteDto {

        @GeneratedValue
        @Min(value = 100)
        @Max(value = 999)
        int id;
        @NotEmpty(message="Source cannot be null")
        @Pattern(regexp="^[A-Za-z]+$")
        String source;
        @NotEmpty(message="Destination cannot be null")
        @Pattern(regexp="^[A-Za-z]+$")
        String destination;
        @OneToMany
//      @NotEmpty(message="Train List cannot be null")
        private List<TrainDto> trainList;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getSource() {
            return source;
        }
        public void setSource(String source) {
            this.source = source;
        }
        public String getDestination() {
            return destination;
        }
        public void setDestination(String destination) {
            this.destination = destination;
        }
        public List<TrainDto> getTrainList() {
            return trainList;
        }
        public void setTrainList(List<TrainDto> trainList) {
            this.trainList = trainList;
        }
        public RouteEntity createEntity() {
            RouteEntity routeEntity=new RouteEntity();
            routeEntity.setId(this.getId());
            routeEntity.setSource(this.getSource());
            routeEntity.setDestination(this.getDestination());
            List<TrainEntity> trainEntityList=new ArrayList<TrainEntity>();
            List<TrainDto> trainDtoList=this .getTrainList();
            if(trainDtoList!=null) {
                for(TrainDto train:trainDtoList) {
                    trainEntityList.add(train.createEntity());
                }
            }
            routeEntity.setTrainList(trainEntityList);
            return routeEntity;
        }
}

TrainDto.java

public class TrainDto {
    int id;
    String trainName;
    String arrivalTime;
    String departureTime;
    Double fare;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getTrainName() {
        return trainName;
    }
    public void setTrainName(String trainName) {
        this.trainName = trainName;
    }
    public String getArrivalTime() {
        return arrivalTime;
    }
    public void setArrivalTime(String arrivalTime) {
        this.arrivalTime = arrivalTime;
    }
    public String getDepartureTime() {
        return departureTime;
    }
    public void setDepartureTime(String departureTime) {
        this.departureTime = departureTime;
    }
    public Double getFare() {
        return fare;
    }
    public void setFare(Double fare) {
        this.fare = fare;
    }
    public TrainEntity createEntity() {
        TrainEntity trainEntity=new TrainEntity();
        trainEntity.setId(this.getId());
        trainEntity.setTrainName(this.getTrainName());
        trainEntity.setArrivalTime(this.getArrivalTime());
        trainEntity.setDepartureTime(this.getDepartureTime());
        trainEntity.setFare(this.getFare());
        return trainEntity;
    }

}

RouteService.java

@Service
public class RouteService {
    @Autowired
    RouteRepository routeRepository;

    public int createRoute(RouteDto route) {
        RouteEntity routeEntity=route.createEntity();
        routeRepository.save(routeEntity);
        return routeEntity.getId();
    }

}

RouteController.java

@@ RestController

public class RouteController {
    @Autowired
    RouteService routeService;

    @PostMapping("/routes")
    public ResponseEntity<Integer> createRoute(@Validated @RequestBody RouteDto routeDto){
        int routeId=routeService.createRoute(routeDto);
        return new ResponseEntity<>(routeId, HttpStatus.OK);
    }

}

已发送POST JSON:

{
    "id":102,
    "source":"Howrah",
    "destination":"Sonarpur",
    "trainlist":[{
        "id":"203"
        "trainame":"Sonarpur Local",
        "arrivaltime":"00:00:00",
        "departuretime":"00:00:00",
        "fare":"30.00"
    }]

}

RouteEntity.java

@Entity
@Table(name="route")
public class RouteEntity {
    @Id
    int id;
    String source;
    String destination;
    @OneToMany
    private List<TrainEntity> trainList;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getSource() {
        return source;
    }
    public void setSource(String source) {
        this.source = source;
    }
    public String getDestination() {
        return destination;
    }
    public void setDestination(String destination) {
        this.destination = destination;
    }
    public List<TrainEntity> getTrainList() {
        return trainList;
    }
    public void setTrainList(List<TrainEntity> trainList) {
        this.trainList = trainList;
    }

}

TrainEntity.java

@Entity
@Table(name="train")
public class TrainEntity {
    @Id
    @GeneratedValue
    int id;
    String trainName;
    String arrivalTime;
    String departureTime;
    Double fare;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getTrainName() {
        return trainName;
    }
    public void setTrainName(String trainName) {
        this.trainName = trainName;
    }
    public String getArrivalTime() {
        return arrivalTime;
    }
    public void setArrivalTime(String arrivalTime) {
        this.arrivalTime = arrivalTime;
    }
    public String getDepartureTime() {
        return departureTime;
    }
    public void setDepartureTime(String departureTime) {
        this.departureTime = departureTime;
    }
    public Double getFare() {
        return fare;
    }
    public void setFare(Double fare) {
        this.fare = fare;
    }


}
The train list is coming empty.
java spring-boot persistence
1个回答
0
投票

RouteEntity表中,在ID上添加@GeneratedValue以生成ID

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
int id;

并添加CascadeType.ALL,以便trainList持续存在

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private List<TrainEntity> trainList;
© www.soinside.com 2019 - 2024. All rights reserved.