Я пытаюсь обновить «состояние» моего набора данных до «СОХРАНЕНО» из «ПРИНЯТО». Он обновляется, как и ожидалось, но также обновляет один из нетронутых атрибутов (тип 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 . Любая помощь приветствуется, спасибо.