2013-04-18 148 views
2

我正在使用澤西島,並希望POST作爲一個實體。然而THST 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

你可以顯示'workstationService'的代碼嗎?你使用Hibernet或簡單的jdbc或任何其他orm工具 –

+0

我很確定我可以幫助你,因爲我廣泛使用jpa,jersey和jackson,但我不明白你的問題。你想達到什麼目的。 –

+0

@ChrisHinshaw - 當json映射到一個對象時,是否可以將一個「user:{id:4}」映射作爲JPA用戶實體,而不是具有填充ID列的用戶對象? – Webnet

回答

0

您可以顯示workstationService代碼?您是使用Hibernatr還是簡單的jdbc或其他orm tool

我想在workstationService.save(workstationEntity);裏面,你需要附加workstationEntity會話(在Hibernate Hibernate Session的情況下)。然後save它..

0

如果我明白這個問題,它是返回的json有一個空的id爲所連接的WorkstationProcessEntity id字段。當您試圖在返回分離的實體之前持續/合併事務未提交的實體時,這很可能是一個問題。如果您使用持久性請確保您提交事務,否則該ID將爲空。否則,如果您正在使用合併,這通常會解決問題。

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。否則附加的實體將爲空。或者添加FetchType.Eager批註,以便在訪問父文件時從數據庫中讀取子實體。

+0

我建議添加fetchtype.eager的建議是爲您的REST操作使用一個servlet過濾器,這將確保所連接的子項被連接。 –