Hibernate: Как установить для поля внешнего ключа значение null, если оно слишком определено в его таблице? - PullRequest
0 голосов
/ 25 октября 2018

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

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

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

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

{
  "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;
    }
}

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

enter image description here

Пожалуйста, сообщите.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...