Java Spring @ManyToOne и @JoinColumn не загружают данные из таблицы должным образом. Значение всегда равно нулюJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Java Spring @ManyToOne и @JoinColumn не загружают данные из таблицы должным образом. Значение всегда равно нулю

Сообщение Anonymous »

У меня есть класс DTO под названием «Устройство» с некоторыми свойствами. В этом классе есть две реализации классов как объектов, которые следует сохранить в таблице. Я добавил к ним аннотации @ManyToOne и @JoinColumn, как вы можете видеть в коде.

Код: Выделить всё

@Entity
@Getter
@Setter
public class Device {

@Id
@org.springframework.data.annotation.Id
@UuidGenerator
private UUID id;

/**
* The hardware associated with the device.
*
* @see GenericHardwareData for more info
*/
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "hardware")
private GenericHardwareData hardware;

/**
* The storage capacity of the device.
*/
private int storage;

/**
* The operating system of the device.
*/
@ManyToOne
@JoinColumn(name = "operation_system")
private OsDto operationSystem;

private String name;

}
Моя проблема заключается в том, что данные для OsDto не загружаются в класс Device.
Журнал браузера Chrome из внешнего приложения, написанный на angular
< em>Снимок экрана показывает прямой объект после http-запроса.
Вот следующий код контроллера, который обрабатывает запрос

Код: Выделить всё

@Slf4j
@RestController
@RequestMapping("/hardware")
public class HardwareController {

private final HardwareRepository hardwareRepository;
private final HardwareService hardwareService;

@Autowired
public HardwareController(HardwareRepository hardwareRepository, HardwareService hardwareService) {
this.hardwareRepository = hardwareRepository;
this.hardwareService = hardwareService;
}

@GetMapping
@Secured({"ADMIN", "VIEW"})
public ResponseEntity getHardware() {
return ResponseEntity.ok(this.hardwareRepository.findAll());
}

@GetMapping("/find")
@Secured({"ADMIN", "VIEW"})
public ResponseEntity getHardwareByQrCode(@RequestParam("qrcode") String qrCode) {
try {
int qr = Integer.parseInt(qrCode);
return ResponseEntity.of(this.hardwareRepository.findByQrCode(qr));
} catch (NumberFormatException e) {
return ResponseEntity.badRequest().body("{\"error\": \"qr code can't be parsed to integer\"}");
}
}

@GetMapping("/device")
@Secured({"ADMIN", "VIEW"})
public ResponseEntity getComputerByQrCode(@RequestParam("qrcode") String qrCode, @RequestParam("type") String rawHardwareType) {

try {
HardwareType hardwareType = HardwareType.valueOf(rawHardwareType);

switch (hardwareType) {`enter code here`
case COMPUTER -> {
return this.hardwareService.getComputerFromQrCode(qrCode);
}
case DOCKING_STATION -> {
return this.hardwareService.getDockingStationByQrCode(qrCode);
}
case MOBILE -> {
return this.hardwareService.getMobileFromQrCode(qrCode);
}
case MONITOR -> {
return this.hardwareService.getMonitorByQrCode(qrCode);
}
case PRINTER -> {
return this.hardwareService.getPrinterByQrCode(qrCode);
}
}

} catch (IllegalArgumentException e) {
return ResponseEntity.badRequest().body("{\"error\": \"hardware type couldn't be serialized\"}");
}

return ResponseEntity.notFound().build();
}

@GetMapping("/find/{type}")
@Secured({"ADMIN", "VIEW"})
public ResponseEntity  getHardwareByType(@PathVariable String type) {

try {
return ResponseEntity.ok(this.hardwareRepository.findAllByHardwareType(HardwareType.valueOf(type.toUpperCase())));
} catch (IllegalArgumentException e) {
return new ResponseEntity(e.getMessage(), HttpStatus.BAD_REQUEST);
}

}

}
и класс OsDto

Код: Выделить всё

@Entity
@Getter
@Setter
public class OsDto {

@Id
@org.springframework.data.annotation.Id
@UuidGenerator
private UUID id;

@Column(unique = true)
private String name;

}
  • Я попробовал добавить FetchType#EAGER в аннотацию ManyToOne, но ничего не изменилось. Значение осталось нулевым.
  • Я поискал в базе данных, чтобы узнать, действительно ли это значение равно нулю, но база данных имеет правильный ключ в поле Operation_system и операционную систему таблица имеет тот же ключ со значением


Подробнее здесь: https://stackoverflow.com/questions/793 ... table-as-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»