Составной ключ Jpa с одним нулем вставки столбца @GeneratedValue в сопоставлении @JoinColumns @OneToMany - PullRequest
0 голосов
/ 19 сентября 2018

Я использую 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;
    .....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...