org.postgresql.util.PSQLException: ERROR: insert or update on table "party_custom_fields" violates foreign key constraint "fk21oqkpi7046skme7jce06fxdu"
Ниже ошибка может помочь, что нужно сделать с кодом, я пробовал несколько ссылок, но не помогло.
Detail: Key (custom_field_value)=(11) is not present in table "custom_field_value"
Выше моя ошибка при сохранении.
Party - это класс, который будет иметь настраиваемые поля и данные
import lombok.Data;
import javax.persistence.*;
import java.util.HashMap;
import java.util.Map;
@Entity
@Data
@Table(name = "party")
public class Party {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@Column(name = "last_name")
private String lastName;
private String email;
private String gender;
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "party_custom_fields",
joinColumns = {@JoinColumn(name = "custom_field")},
inverseJoinColumns = {@JoinColumn(name = "custom_field_value")})
@MapKeyColumn(name = "custom_field_key")
private Map<Long, CustomFieldValue> customField = new HashMap<>();
public Party() {
}
public Party(String name) {
this.name = name;
}
}
Модель значений пользовательских полей
package org.aeq.multitenant.model;
import lombok.Data;
import javax.persistence.*;
@Data
@Entity
@Table(name = "custom_field_value")
public class CustomFieldValue {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String value;
}
Модель настраиваемых полей, в которой содержатся настраиваемые поля для таблиц
package org.aeq.multitenant.model;
import lombok.Data;
import org.aeq.multitenant.enums.Tables;
import javax.persistence.*;
@Data
@Entity
@Table(name = "custom_field")
public class CustomField {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String type;
private boolean optional;
@Enumerated(EnumType.STRING)
@Column(name = "table_name")
private Tables tableName;
}
Функция контроллера для сохранения
Map<Long, CustomFieldValue> cfMap = new HashMap<>();
for (CustomField cf : customFields) {
if (!partyData.containsKey(cf.getName())) {
return new ApiResult<>(false, "Please provide " + cf.getName() + " custom field of party");
} else {
CustomFieldValue cfv = new CustomFieldValue();
cfv.setValue(partyData.get(cf.getName()).trim());
cfv = customFieldValueRepository.save(cfv);
cfMap.put(cf.getId(), cfv);
}
}
Party party = new Party();
party.setName(partyData.get("name"));
party.setEmail(partyData.get("email").trim());
party.setGender(partyData.get("gender").trim());
party.setLastName(partyData.get("last_name").trim());
party.setCustomField(cfMap);
party = partyRepository.save(party);
пожалуйста, просмотрите мой код и сообщите мне, где я ошибаюсь