我正在使用泽西岛,并且我特意将POST作为一个实体。但是,POST的其中一个关系还包含UUID
:
泽西资源:
@POST
public WorkstationEntity save (WorkstationEntity workstationEntity) {
//WorkflowProcessEntity workflowProcessEntity = workflowProcessService.findByUUID();
workstationService.save(workstationEntity);
return workstationEntity;
}
如何调整以下映射,以便识别关系并正确保存?目前workflow_process_id
在保存时为NULL,我必须手动查询实体。
发布的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;
}
workstationService
@Transactional
public void save(WorkstationEntity workstationEntity) {
workstationRepository.save(workstationEntity);
}
答案 0 :(得分:0)
你能展示workstationService
的代码吗?您使用的是Hibernatr
还是简单jdbc
还是其他任何orm tool
?
我认为在workstationService.save(workstationEntity);
内你需要将workstationEntity
附加到会话(如果是Hibernate Hibernate Session)。然后save
它..
答案 1 :(得分:0)
如果我理解了问题,那么返回的json对于附加的WorkstationProcessEntity id字段具有空id。当您尝试在返回分离的实体之前保持/合并事务未提交的实体时,这很可能是一个问题。如果您使用的是persist,请确保提交事务,否则id将为null。否则,如果您使用合并,这通常可以解决问题。
protected T persist(T obj) {
EntityManager em = ThreadLocalPersistenceManager.getEntityManager();
EntityTransaction tx = em.getTransaction();
try {
if (! tx.isActive()) {
tx.begin();
}
em.persist(obj);
} finally {
if (!tx.getRollbackOnly()) {
tx.commit();
}
}
return obj;
}
另一个可能的原因是您的提取未设置为急切,因此数据存储区仅在访问实体时获取实体,并且当您从帖子返回时未附加子实体。这是导致问题的最可能原因。您应该尝试在关闭实体管理器之前访问工作站授权getWorkflowProcess。否则附加的实体将为null。或者,在访问父级时,添加FetchType.Eager批注以从数据库中获取子实体。