Я знаю, что название может быть немного неясным, поэтому позвольте мне объяснить лучше:
У меня есть 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;
}
}
а таблица региона:
Пожалуйста, порекомендуйте.
Спасибо
Там четко написано ids must be assign manually
. Поскольку вы не используете @GeneratedValue
, вам необходимо установить значение region
вручную. Можно ли установить значение для region
и проверить?
Ребята, у региона два поля: primaryDc (обязательное) и secondaryDc (должно быть необязательным: значение dc или ноль). Значения для этих полей постоянного тока должны быть объявлены в таблице центра данных. Надеюсь, теперь дело прояснилось :)
Не могли бы вы добавить свой код туда, где вы сохраняете свою сущность? Хотя, похоже, проблема вызвана идентификатором.
Похоже, он жалуется, что вы не добавили аннотацию
@GeneratedValue
в поле ID.