2017-09-25 37 views
2

我在ProjectRequirement實體之間有一對多的關係。當級聯=「全部刪除 - 孤立」的集合在更新時不再被擁有實體實例引用

HTML:

<div class="container"> 
    <div class="row"> 
     <div class="col-sm-2"></div> 
     <div class="col-sm-8"> 
      <form action="#" th:action="@{/projects/updateProject/(id=${project.id})}" method="post"> 
       <input hidden="hidden" name="id" th:value="${project.id}" /> 
       <div class="form-group"> 
        <label>Project</label> 
        <input type="text" name="projectNaam" class="form-control" id="projectName" th:value="${project.projectName}" placeholder="Project" /> 
       </div> 
       <button type="submit" class="btn btn-default">Submit</button> 
      </form> 

     </div> 
     <div class="col-sm-2"></div> 
    </div> 
</div> 

這是Project我控制器代碼:

@RequestMapping(value = "/updateProject", method = RequestMethod.POST) 
public String updateProject @ModelAttribute("project") Project project){ 
    this.projectService.saveProject(project); 

    return "redirect:/projects"; 
} 

這是我Project類:

@Entity 
@Table(name = "Project") 
public class Project { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 

    private String projectName; 

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true) 
    @JoinColumn(name = "project_id") 
    private Set<Requirement> requirements; 

    public Project(){ 

    } 

    public Project(String projectName) { 
     this.projectName = projectName; 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getProjectName() { 
     return projectName; 
    } 

    public void setProjectName(String projectName) { 
     this.projectName = projectName; 
    } 

    public Set<Requirement> getRequirements(){ return requirements; } 

    public void setRequirements(Set<Requirement> requirements){ this.requirements = requirements; } 

更新項目時,我得到的錯誤(只更新名稱)。 已經在互聯網上尋找解決方案,但沒有找到一個適合我的工作。

回答

3

我會嘗試一個或以下所有條件:

  • 您是從事務上下文之外傳遞Project對象。確保它在保存之前合併。
  • 確保Set中的每個Requirement都參考Project實體。
  • 確保合併之後,您不使用public void setRequirements(Set<Requirement> requirements)方法。
  • 正如您使用Set。確保Requirement已正確實施hashCodeequals
+0

感謝您的反饋!你的第一點:我應該將項目與其要求合併?你的第二點:我想要連接是單向的。我可以通過以下方式實現此目的:在編輯時保存項目之前,檢索項目的當前需求,將其添加到從參數獲取的Project對象中?最後保存? – Urban

+0

是,只要您檢索需求並使用相同的事務處理方法執行項目的保存/合併即可。 –

相關問題