javajackson映射关系
我正在使用Jersey,作为一个实体体验一个帖子。但是,thst POST还将包含其关系之一的UUID
:
泽西岛资源:
@POST
public WorkstationEntity save (WorkstationEntity workstationEntity) {
//WorkflowProcessEntity workflowProcessEntity = workflowProcessService.findByUUID();
workstationService.save(workstationEntity);
return workstationEntity;
}
如何调整以下映射,使其能够识别关系并正确保存?当前workflow_process_id
在保存时为空,我必须手动查询实体
正在发布的JSON是{name: Workstation 1; workflow_process_id: 1}
private WorkflowProcessEntity workflowProcess;
@ManyToOne
@JoinColumn(name = "workflow_process_id", referencedColumnName = "id")
public WorkflowProcessEntity getWorkflowProcess() {
return workflowProcess;
}
public void setWorkflowProcess(WorkflowProcessEntity workflowProcess) {
this.workflowProcess = workflowProcess;
}
工作站服务
@Transactional
public void save(WorkstationEntity workstationEntity) {
workstationRepository.save(workstationEntity);
}
# 1 楼答案
你能展示
workstationService
的代码吗?您使用的是Hibernatr
还是简单的jdbc
或任何其他orm tool
我认为在
workstationService.save(workstationEntity);
内部,您需要将workstationEntity
附加到会话(在Hibernate-Hibernate会话的情况下)。然后save
它# 2 楼答案
如果我理解这个问题,那就是返回的json对于附加的WorkstationProcessEntity id字段具有空id。当您试图持久化/合并实体时,这很可能是一个问题。在返回分离的实体之前,事务没有提交。如果您使用的是persist,请确保提交事务,否则id将为null。否则,如果您使用的是合并,这通常会解决问题
另一个可能的原因是,fetch未设置为eager,因此数据存储仅在访问实体时才会获取该实体,并且在您从post返回时,子实体尚未附加。这是你问题的最可能原因。您应该尝试在关闭实体管理器之前访问工作站实体的getWorkflowProcess。否则,附加的实体将为空。或者添加FetchType。当访问父实体时,从数据库中获取子实体的急切注释