Ошибка Hibernate SQL: NULL не разрешен для столбца «ID» в INSERTJAVA

Программисты JAVA общаются здесь
Anonymous
Ошибка Hibernate SQL: NULL не разрешен для столбца «ID» в INSERT

Сообщение Anonymous »

У меня возникла проблема с Hibernate при попытке вставить запись в базу данных. Вот подробности проблемы:
Описание проблемы: я использую Hibernate с Spring Boot для сохранения данных в базе данных H2. При попытке сохранить новую запись в таблице «устройство» Hibernate выдает ошибку с указанием «NULL не разрешен для столбца «ID»». Я определил столбец «ID» как первичный ключ с автоматическим приращением в схеме базы данных.
Схема базы данных: Класс сущности:

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

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "device")
public class Device {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String manufacturer;
private String model;
private int ram;
private int rom;
private String color;

@Enumerated(EnumType.STRING)
@Column(columnDefinition = "VARCHAR(255)")
private Spec spec;

private int quantity;
}
Класс Dto:

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

@Data
@AllArgsConstructor
@NoArgsConstructor
public class DeviceDto {
private Long id;
private String manufacturer;
private String model;
private int ram;
private int rom;
private String color;
private String spec;
private int quantity;
}
DeviceMapper:

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

@Mapper
public interface DeviceMapper {
DeviceMapper INSTANCE = Mappers.getMapper(DeviceMapper.class);

@Mapping(target = "spec", source = "spec", qualifiedByName = "specToString")
DeviceDto deviceToDeviceDto(Device device);

@Mapping(target = "spec", source = "spec", qualifiedByName = "stringToSpec")
@Mapping(target = "id", ignore = true)
Device deviceDtoToDevice(DeviceDto deviceDto);

@Named("specToString")
default String mapSpecToString(Spec spec) {
return spec != null ? spec.name() : null;
}

@Named("stringToSpec")
default Spec mapStringToSpec(String spec) {
return spec != null ? Spec.valueOf(spec) : null;
}
}
Метод addDevice в классе службы и контроллера:

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

    public DeviceDto addDevice(DeviceDto deviceDto) {
Device device = DeviceMapper.INSTANCE.deviceDtoToDevice(deviceDto);
Device savedDevice = deviceRepository.save(device);
return DeviceMapper.INSTANCE.deviceToDeviceDto(savedDevice);
}

@PostMapping("/add")
@Operation(summary = "Add device")
public DeviceDto addDevice(@RequestBody DeviceDto deviceDto) {
return deviceService.addDevice(deviceDto);
}
Я пытался удалить идентификатор в классе DTO, добавив в Mapper аннотации, чтобы игнорировать идентификатор. Также в пользовательском интерфейсе swagger в теле запроса укажите значение идентификатора как нулевое или любое целое число

Подробнее здесь: https://stackoverflow.com/questions/787 ... -on-insert

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