代码之家  ›  专栏  ›  技术社区  ›  dushkin

为什么要获取hibernate.TransientPropertyValueException?

  •  0
  • dushkin  · 技术社区  · 7 年前

    @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\u UPDATE,但得到了相同的结果。

    请告知。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Jignesh M. Khatri    7 年前

    例外情况是 InventoryDataCenterEntity 在里面 InventoryRegionEntity cascadeType.ALL 将保存 随着 如果尚未保存在数据库中。