SpringData JPA repo.save () изменяет атрибут jsonb на ноль - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь обновить «состояние» моего набора данных до «СОХРАНЕНО» из «ПРИНЯТО». Он обновляется, как и ожидалось, но также обновляет один из нетронутых атрибутов (тип jsonb) до нуля.

Метод обслуживания:

@Async
@Transactional
public void saveDataSetReferences(final DataSet dataSet, final DataSetCreateRequest dataSetCreateRequest) {

    LOG.info("CURRENT DATA SET :  "+ dataSet.toString());
    Optional<DataSet> dataSetOptional = dataSetRepository.findById(dataSet.getId());
    if(dataSetOptional.isEmpty()) throw new 
                       DataSetNotFoundException(dataSet.getId().toString());
    DataSet ds = dataSetOptional.get();
    LOG.info("DATA SET BEFORE SAVE :  "+ ds.toString());
    ds.setStatus(SAVED);
    DataSet dsSaved = dataSetRepository.save(ds);
    LOG.info("DATA SET AFTER SAVE :  "+ dsSaved.toString());

}

DataSet DTO

@Data
@EqualsAndHashCode(callSuper = true)
@Entity(name = "data_set")
@TypeDef(name = "JSONBUserType", typeClass = JSONBUserType.class)
public class DataSet extends AbstractEntity {
  //used to expire a dataSet if more than 30 days or if cluster is removed
  private boolean isExpired = false;
  @Column(unique=true)
  private String name;
  @ManyToOne
  private Principal owner;
  @OneToMany(fetch=FetchType.EAGER)
  private Collection<DataReference> references;
  private boolean reviewCompleted = false;
  @Type(type = "JSONBUserType")
  @Column(columnDefinition = "json")
  private DataSetCreateRequest dataSetCreateRequest;
  private String status;
  @ManyToMany
  private Collection<Cluster> cluster;
}

Перед вызовом метода Service для сохранения, запись в db выглядит следующим образом

{
    "dataSet": {
        "id": "cfc29fb6-8d5e-43ff-99ca-f1cde9d8f075",
        "name": "video 9",
        "owner": null,
        "references": null,
        "reviewCompleted": false,
        "dataSetCreateRequest": {
            "name": "video 9",
            "minSize": 100000,
            "maxSize": 500000,
            "minTotalElements": 10,
            "maxTotalElements": 10000,
            "contentType": "video"
        },
        "status": "ACCEPTED",
        "cluster": null,
        "expired": false
    }
}

После вызова метода SAVE

{
    "dataSet": {
        "id": "cfc29fb6-8d5e-43ff-99ca-f1cde9d8f075",
        "name": "video 9",
        "owner": null,
        "references": [],
        "reviewCompleted": false,
        "dataSetCreateRequest": null,
        "status": "SAVED",
        "cluster": [],
        "expired": false
    }
}

Я прочитал о том, как asyn c и транзакционный работает, но не уверен, почему dataSetCreateRequest оказывается null . Любая помощь приветствуется, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...