Есть 2 таблицы ts_message и ts_project. Первая хранит ссылку на вторую (project_id), в без вторичного ключа в бд. Есть значения из project (id) которые сохраняются в message (project_id) а есть которые проставляются как нулл, хотя они есть в project. Подскажите куда копать
ProjectEntity:
Код:
@Table(name = "ts_project")
public class ProjectEntity {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@NotBlank
@Column(name = "code", nullable = false)
private String code;
@NotBlank
@Column(name = "value_kz", nullable = false)
private String valueKz;
@NotBlank
@Column(name = "value_ru", nullable = false)
private String valueRu;
@OneToMany(mappedBy = "projectEntity")
@JsonBackReference
private List<DashBoardEntity> dashBoardEntityList;
}
ProjectDto:
Код:
@Data
public class ProjectDto {
private String code;
private String valueKz;
private String valueRu;
}
DashboardEntity:
Код:
@Table(name = "ts_message")
public class DashBoardEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "date", nullable = false)
private Date date;
@Column(name = "spent_hours", nullable = false)
private Integer spentHours;
@Column(name = "task_notation")
private String taskNotation;
@Column(name = "jira_sprint")
private String jiraSprint;
@Column(name = "jira_ticket")
private String jiraTicket;
@Column(name = "jira_planned_hours")
private String jiraPlannedHours;
@Column(name = "status")
private boolean status;
@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
@JoinColumn(name = "project_id")
private ProjectEntity projectEntity;
@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
@JoinColumn(name = "task_id")
private TaskEntity taskEntity;
}
DashboardDto:
Код:
@Data
public class DashBoardDto {
private Date date;
private Integer spentHours;
private Long taskId;
private String taskNotation;
private Boolean status;
private Long projectId;
private String jiraSprint;
private String jiraTicket;
private String jiraPlannedHours;
}
DashboardController:
Код:
@RequiredArgsConstructor
public class DashBoardController {
private final ModelMapper modelMapper;
private final DashBoardRepo dashBoardRepo;
private final ProjectRepo projectRepo;
private final TaskRepo taskRepo;
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public List<DashBoardDto> getAllDashBoard() {
List<DashBoardEntity> dashBoardList = (List<DashBoardEntity>) dashBoardRepo.findAll();
return dashBoardList.stream().map(this::toDto).collect(Collectors.toList());
}
@PostMapping(value = "/add", consumes = MediaType.APPLICATION_JSON_VALUE, produces =
MediaType.APPLICATION_JSON_VALUE)
public void createDashBoard(@RequestBody DashBoardDto dashBoardDto) {
DashBoardEntity dashBoardEntity = toEntity(dashBoardDto);
DashBoardEntity dashBoardEntity1 = dashBoardRepo.save(dashBoardEntity);
}
@GetMapping(value = "/{id}", produces =
MediaType.APPLICATION_JSON_VALUE)
public DashBoardDto getDashBoardById(@PathVariable(value = "id") Long id) {
return toDto(dashBoardRepo.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("DashBoard", "id", id)));
}
@PostMapping(value = "/update/{id}", consumes = MediaType.APPLICATION_JSON_VALUE, produces =
MediaType.APPLICATION_JSON_VALUE)
public void updateDashBoard(@PathVariable(value = "id") Long id, @Valid @RequestBody DashBoardDto dashBoardDetail) {
modelMapper.getConfiguration().setAmbiguityIgnored(true);
DashBoardDto dashBoardDto = toDto(dashBoardRepo.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("DashBoard", "id", id)));
dashBoardDto.setDate(dashBoardDetail.getDate());
dashBoardDto.setTaskId(dashBoardDetail.getTaskId());
dashBoardDto.setSpentHours(dashBoardDetail.getSpentHours());
dashBoardDto.setTaskNotation(dashBoardDetail.getTaskNotation());
dashBoardDto.setJiraSprint(dashBoardDetail.getJiraSprint());
dashBoardDto.setJiraPlannedHours(dashBoardDetail.getJiraPlannedHours());
dashBoardDto.setJiraTicket(dashBoardDetail.getJiraTicket());
dashBoardDto.setStatus(dashBoardDetail.getStatus());
dashBoardDto.setProjectId(dashBoardDetail.getProjectId());
DashBoardEntity dashBoardEntity = toEntity(dashBoardDto);
dashBoardEntity.setId(id);
dashBoardRepo.save(dashBoardEntity);
}
@DeleteMapping(value = "/delete/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public void deleteDashBoard(@PathVariable(value = "id") Long id) {
DashBoardDto dashBoardDto = toDto(dashBoardRepo.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("DashBoard", "id", id)));
DashBoardEntity dashBoardEntity = toEntity(dashBoardDto);
dashBoardEntity.setId(id);
dashBoardRepo.delete(dashBoardEntity);
}
private DashBoardEntity toEntity(DashBoardDto dashBoardDto) {
modelMapper.getConfiguration().setAmbiguityIgnored(true);
DashBoardEntity dashBoardEntity = modelMapper.map(dashBoardDto, DashBoardEntity.class);
Optional <ProjectEntity> optionalProjectEntity = projectRepo.findById(dashBoardDto.getProjectId());
ProjectEntity projectEntity = optionalProjectEntity.isPresent() ? optionalProjectEntity.get() : null;
dashBoardEntity.setProjectEntity(projectEntity);
Optional <TaskEntity> optionalTaskEntity = taskRepo.findById(dashBoardDto.getTaskId());
TaskEntity taskEntity = optionalTaskEntity.isPresent() ? optionalTaskEntity.get() : null;
dashBoardEntity.setTaskEntity(taskEntity);
return dashBoardEntity;
}
private DashBoardDto toDto(DashBoardEntity dashBoardEntity) {
return modelMapper.map(dashBoardEntity, DashBoardDto.class);
}
}