【发布时间】:2018-08-27 18:05:15
【问题描述】:
我有一个如下所示的 JPA 实体,它有 OneToMany 集合,当我对集合中提到的实体使用保存时,我希望刷新会自动刷新更改并填充集合,但它没有发生,有没有办法可以强制刷新。
@Entity
@Table(name = "data_clctn_instc")
public class DataCollectionInstance {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator ="data_clctn_instc_seq_gen")
@SequenceGenerator(name = "data_clctn_instc_seq_gen", sequenceName = "data_clctn_instc_seq", allocationSize = 1)
@Column(name = "id")
private Long id;
@ManyToOne(optional = false)
@JoinColumn(name = "data_clctn_tmplt_id")
@JsonBackReference
private DataCollectionTemplate dataCollectionTemplate;
@OneToMany(mappedBy = "dataCollectionInstance")
private Collection<DataCollectionInstanceEvent> events;
@OneToMany(mappedBy = "dataCollectionInstance")
private Collection<PostProcessingInstance> postProcessingInstances;
}
我的 jpa 存储库类
@Repository
public interface DataCollectionInstanceDao extends CrudRepository<DataCollectionInstance, Long> {
}
@RequestMapping(value = "/{template}/instance", method = RequestMethod.POST, consumes = {"application/json"})
@PreAuthorize("hasAuthority('" + SecurityFunctions.FN_CREATE_INSTANCE + "')")
@ResponseStatus(code = HttpStatus.CREATED)
public DataCollectionInstance createInstance(@PathVariable(TEMPLATE_PATH_VARIABLE) final String templateName,
@RequestBody DataCollectionEntity dataCollectionEntity) {
DataCollectionInstance dataCollectionInstance = dataCollectionInstanceService.createInstance(templateName, dataCollectionEntity);
return dataCollectionInstance;
}
public DataCollectionInstance createInstance(String templateName, DataCollectionEntity dataCollectionEntity) {
// get the template
Optional<DataCollectionTemplate> dataCollectionTemplateOptional = dataCollectionTemplateDao.findByName(templateName);
if (!dataCollectionTemplateOptional.isPresent()) {
throw new IllegalArgumentException("Invalid templateName");
}
DataCollectionTemplate dataCollectionTemplate = dataCollectionTemplateOptional.get();
DataCollectionInstance dataCollectionInstance = createInstance(dataCollectionTemplate, dataCollectionEntity);
createEvent(dataCollectionEntity, dataCollectionTemplate, dataCollectionInstance);
createProcessingInstance(dataCollectionInstance)
return dataCollectionInstance;
}
private void createProcessingInstance(DataCollectionInstance dataCollectionInstance) {
PostProcessingInstance pi = new PostProcessingInstance();
pi.setDataCollectionInstance(dataCollectionInstance);
pi.setCreatedBy(getUserName());
pi.setCreatedDate(new Date());
pi.setResourceName(execution);
pi.setResponse("rspo");
pi.setStatus("adf");
// save to DB
postProcessingInstanceDao.save(pi);
}
private DataCollectionInstanceEvent createEvent(DataCollectionEntity dataCollectionEntity,
HttpMethod eventStatus, DataCollectionInstance dataCollectionInstance) {
DataCollectionInstanceEvent dataCollectionInstanceEvent = new DataCollectionInstanceEvent();
dataCollectionInstanceEvent.setAction(eventStatus);
dataCollectionInstanceEvent.setCreatedBy(getUserName());
dataCollectionInstanceEvent.setData(dataCollectionEntity.getSubmitData().toString());
dataCollectionInstanceEvent.setDataCollectionInstance(dataCollectionInstance);
dataCollectionInstanceEventDao.save(dataCollectionInstanceEvent);
return dataCollectionInstanceEvent;
}
private DataCollectionInstance createInstance(DataCollectionTemplate dataCollectionTemplate, DataCollectionEntity dataCollectionEntity){
DataCollectionInstance dataCollectionInstance = new DataCollectionInstance();
dataCollectionInstance.setStatus(dataCollectionEntity.getStatus());
dataCollectionInstance.setDataCollectionTemplate(dataCollectionTemplate);
dataCollectionInstance.setSubmitData(dataCollectionEntity.getSubmitData().toString());
dataCollectionInstance.setCreatedBy(getUserName());
dataCollectionInstance.setCreatedDate(new Date());
dataCollectionInstance = dataCollectionInstanceDao.save(dataCollectionInstance);
return dataCollectionInstance;
}
我稍后尝试通过 findById 获取 DataCollectionInstance 但没有成功。
我做错了什么?
【问题讨论】:
-
您能分享您调用存储库方法的代码吗?可能有一个事务性进程,它会回滚保存操作。
-
扩展
JpaRepository,如果您想手动处理它,请自行在存储库上调用flush。 -
@DarrenForsythe 我试过 JpaRepository 但没有用。
-
@EmreSavcı 更新了控制器和服务类
标签: java spring-boot spring-data-jpa