Hibernate: как установить для поля внешнего ключа значение null, если оно тоже определено в его таблице?

Я знаю, что название может быть немного неясным, поэтому позвольте мне объяснить лучше:

У меня есть 2 таблицы с соответствующими объектами Hibernate. Первая сущность, InventoryRegionEntity, содержит 2 члена типа InventoryDataCenterEntity.

Первый член является обязательным, а второй - необязательным и может иметь значение NULL в БД.

Моя проблема в том, что когда я хочу сохранить объект InventoryRegionEntity в db, я получаю:

{
  "severity": "HIGH",
  "message": "ids for this class must be manually assigned before calling save(): com.gms.model.inventory.InventoryDataCenterEntity; nested exception is org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): com.gms.model.inventory.InventoryDataCenterEntity",
  "requestURI": "/global-management-system/v1/region-inventory",
  "type": "org.springframework.orm.jpa.JpaSystemException",
  "stackTrace": null
}

Код такой:

@Entity
@Table(name = "inventory_region")
public class InventoryRegionEntity{

    @Id
    @Column(name = "region", unique = true)
    @Enumerated(EnumType.STRING)
    @NotNull
    private Region region;

    @ManyToOne
    @NotNull
    @Cascade(CascadeType.ALL)
    @JoinColumn(name = "primarydc_name")
    private InventoryDataCenterEntity primaryDC;

    @ManyToOne
    @Cascade(CascadeType.ALL)
    @JoinColumn(name = "secondarydc_name")
    private InventoryDataCenterEntity secondaryDC;

    private boolean anycast;

    public boolean isAnycast () {
        return anycast;
    }

    public void setAnycast ( boolean anycast ) {
        this.anycast = anycast;
    }

    public Region getRegion () {
        return this.region;
    }

    public void setRegion ( Region region ) {
        this.region = region;
    }

    public InventoryDataCenterEntity getPrimaryDC () {
        return primaryDC;
    }

    public void setPrimaryDC ( InventoryDataCenterEntity primaryDC ) {
        this.primaryDC = primaryDC;
    }

    public InventoryDataCenterEntity getSecondaryDC () {
        return secondaryDC;
    }

    public void setSecondaryDC ( InventoryDataCenterEntity secondaryDC ) {
        this.secondaryDC = secondaryDC;
    }
}

@Entity
@Table(name = "inventory_data_center")
public class InventoryDataCenterEntity {

    @Id
    @Column(unique = true)
    private String name;

    @Column(name = "azure_config", columnDefinition = "TEXT")
    @Convert(converter = AzureConfigurationToStringConverter.class)
     private List<PodCollection> azureDataCenters;

    @JoinColumn(name = "monitoringprefix")
    private String monitoringPrefix;

    public String getName () {
        return name;
    }

    public void setName ( String name ) {
        this.name = name;
    }

    @Cascade(CascadeType.ALL)
    public List<PodCollection> getAzureDataCenters () {
        return azureDataCenters;
    }

    public void setAzureDataCenters ( List<PodCollection> azureDataCenters ) {
        this.azureDataCenters = azureDataCenters;
    }

    public String getMonitoringPrefix() {
        return monitoringPrefix;
    }

    public void setMonitoringPrefix(String monitoringPrefix) {
        this.monitoringPrefix = monitoringPrefix;
    }
}

а таблица региона:

Hibernate: как установить для поля внешнего ключа значение null, если оно тоже определено в его таблице?

Пожалуйста, порекомендуйте.

Спасибо

Похоже, он жалуется, что вы не добавили аннотацию @GeneratedValue в поле ID.

Simon Sadetsky 25.10.2018 17:49

Там четко написано ids must be assign manually. Поскольку вы не используете @GeneratedValue, вам необходимо установить значение region вручную. Можно ли установить значение для region и проверить?

Shaunak Patel 25.10.2018 18:35

Ребята, у региона два поля: primaryDc (обязательное) и secondaryDc (должно быть необязательным: значение dc или ноль). Значения для этих полей постоянного тока должны быть объявлены в таблице центра данных. Надеюсь, теперь дело прояснилось :)

dushkin 25.10.2018 18:39

Не могли бы вы добавить свой код туда, где вы сохраняете свою сущность? Хотя, похоже, проблема вызвана идентификатором.

Alain Cruz 25.10.2018 22:31
0
4
26
0

Другие вопросы по теме