Я использую SpringDataJpa и имею сущность ValidationResults, у которой есть внедренный идентификатор класса ValidationResultsIdentity.В этом ключе есть одно автоматически сгенерированное поле.ValidationResults имеет набор ValidationViolation в сопоставлении @OneToMany, в котором есть JoinColumns встроенных ключевых столбцов.
И у меня есть проблема, что, когда я создаю новый ValidationResults с ключом ValidationResultsIdentity без этого автоматически сгенерированного поля, и сохраняю объект.Jpa вставляет правильные значения с полем genreated в таблицу ValidationResults, но он вставляет ноль в качестве этого поля в соответствующую таблицу ValidationViolation.Чтобы было понятнее.Здесь я получил insert_id как нули в таблице ValidationViolation:
Как это исправить?
final ValidationResults validationResults = new ValidationResults(new ValidationResultsIdentity("Workflow_id", processingDate));
final Set<ValidationViolation> violationsSet = new HashSet<>();
final ValidationViolation validationViolation = new ValidationViolation();
validationViolation.setValidationResults(validationResults);
violationsSet.add(validationViolation);
validationResults.setViolations(violationsSet);
validationResultsRepo.save(validationResults);
//inserts in validation_violation table insert_id as null
Вот мои сущности
@Embeddable
public class ValidationResultsIdentity implements Serializable {
@Column(name = "workflow_id")
private String workflowId;
@Column(name = "processing_date")
private Date processingDate;
@Column(name = "insert_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long insertId;
public ValidationResultsIdentity(String workflowId, Date processingDate)
{
this.workflowId = workflowId;
this.processingDate = processingDate;
}
....
ValidationResults
@Entity
@Table(name = "validation_results")
public class ValidationResults {
@EmbeddedId
private ValidationResultsIdentity validationResultsIdentity;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "validationResults", cascade = CascadeType.ALL)
private Set<ValidationViolation> violations = new HashSet<>();
....
ValidationViolation
@Entity
@Table(name = "validation_violation")
public class ValidationViolation {
@Id
@Column(name = "violation_id")
@GeneratedValue(strategy = GenerationType.AUTO)
@ApiModelProperty(hidden = true)
private long violationId;
@ManyToOne
@JoinColumns({
@JoinColumn(name = "workflow_id", referencedColumnName = "workflow_id"),
@JoinColumn(name = "processing_date", referencedColumnName = "processing_date"),
@JoinColumn(name = "insert_id", referencedColumnName = "insert_id"),
})
private ValidationResults validationResults;
.....