Почему я получаю исключение hibernate.TransientPropertyValueException?

Это соответствующий класс:

@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;

    @Column(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;
    }
}

В исключении InventoryRegionEntity упоминается следующее:

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

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

    @ManyToOne
    @NotNull
    private InventoryDataCenterEntity primaryDC;

    @ManyToOne
    @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;
    }
}

И я получаю исключение:

{
  "severity": "HIGH",
  "message": "org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.gms.model.inventory.InventoryRegionEntity.secondaryDC -> com.gms.model.inventory.InventoryDataCenterEntity; nested exception is java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.gms.model.inventory.InventoryRegionEntity.secondaryDC -> com.gms.model.inventory.InventoryDataCenterEntity",
  "requestURI": "/global-management-system/v1/region-inventory",
  "type": "org.springframework.dao.InvalidDataAccessApiUsageException",
  "stackTrace": null
}

Я читал в других сообщениях, что я должен добавить @ Каскад (CascadeType.ALL) перед членом или перед методом получения коллекции (как в примере выше). Я также пробовал CascadeType.PERSIST и CascadeType.SAVE_UPDATE, но получил тот же результат.

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

Спасибо

Можете показать код модели InventoryRegionEntity?

Jignesh M. Khatri 25.10.2018 15:46

@ JigneshM.Khatri добавил

dushkin 25.10.2018 15:50

И вы получаете это исключение, когда пытаетесь сохранить InventoryRegionEntity?

Jignesh M. Khatri 25.10.2018 15:51

@ JigneshM.Khatri права

dushkin 25.10.2018 15:53

Вам нужно добавить @Cascade(CascadeType.ALL) на private InventoryDataCenterEntity secondaryDC; в InventoryRegionEntity.

Jignesh M. Khatri 25.10.2018 15:58

@ JigneshM.Khatri В дополнение к тому, что у меня уже есть? И только для вторичного постоянного тока? А как насчет primaryDC?

dushkin 25.10.2018 16:01

Да в дополнение к тому, что у вас уже есть. Вы не сопоставили primaryDC ни с одним из столбцов. На нем не упоминается @JoinColumn. Таким образом, нет необходимости добавлять каскадный тип на primaryDC.

Jignesh M. Khatri 25.10.2018 16:02

Позвольте нам продолжить обсуждение в чате.

dushkin 25.10.2018 16:03
0
8
216
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Исключение говорит о том, что InventoryDataCenterEntity в InventoryRegionEntity не найден в базе данных, а также вы не сохраняете его в базе данных. Так что эту ценность можно потерять. Таким образом, добавление cascadeType.ALL сохранит InventoryDataCenterEntity вместе с InventoryRegionEntity, если он еще не сохранен в базе данных.

Большое спасибо за уделенное время!

dushkin 25.10.2018 16:34

Пожалуйста :)

Jignesh M. Khatri 25.10.2018 16:39

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