2016-11-29 148 views
0

花太多的一天就此我失去了一些東西明顯與@ManyToOne和@OneToMany映射後。春天JPA通過REST

我有我想通過REST,項目類的又一個里程碑類揭露兩班。每個項目可以有許多相關的里程碑。

@Entity 
    public class Project { 

     @Id 
     @Column(name="project_id") 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     private long id; 

     @OneToMany 
     private List<Milestone> milestones = new ArrayList<>(); 

     private String name; 
     private String description; 

     // Getter and setters removed for brevity 
     } 

    @Entity 
    public class Milestone {  

     @Id 
     @Column(name="milestone_id") 
     @GeneratedValue(strategy = GenerationType.AUTO)  
     private long id; 

     private String name; 
     private String description;   

     @ManyToOne 
     @JoinColumn(name="project_id") 
     private Project project; 

     // Getter and setters removed for brevity 
} 

我的倉庫類:

public interface ProjectRepository extends JpaRepository<Project, Long> { 
    List<Project> findByName(@Param("name") String name);  
} 

public interface MilestoneRepository extends JpaRepository<Milestone, Long> { 
    List<Milestone> findByName(@Param("name") String name);   
} 

更新項目上的URI與後到localhost:8080 /項目/ 1 /里程碑是不行的,不過,我可以創建新的項目和里程碑沒有任何鏈接。

我的目標是發佈新項目條目,隨後發佈隨着時間的推移里程碑項目,這將更新工程類相關的里程碑的列表。

任何想法可能是錯誤的?

UPDATE:

使用Python的HTTPIE工具我做了以下創建初始的項目:

HTTP POST本地主機:8080 /項目名稱= 「測試」 描述= 「測試」

那我下面指定的一個里程碑:

HTTP POST本地主機:8080 /里程碑名稱= 「測試」 描述= 「測試」 項目= 「HTTP://本地主機:8080 /項目/ 1」

迴響應爲:

HTTP/1.1 201 
Content-Type: application/json 
Location: http://localhost:8080/milestones/1 
Transfer-Encoding: chunked 
{ 
    "_links": { 
    "milestone": { 
     "href": "http://localhost:8080/milestones/1" 
     }, 
    "project": { 
     "href":"http://localhost:8080/milestones/1/project" 
     }, 
     "self":{ 
     "href":"http://localhost:8080/milestones/1" 
     } 
    }, 
     "description":"test", 
     "name":"test" 
    } 

在數據庫中的PROJECT_ID列爲空

+0

「不工作」包含零信息。 – Kayaman

+0

儘管參考里程碑和項目類別,但兩個實體並未鏈接。發佈數據的作品,但所產生的project_milestones表和PROJECT_ID列是空 – ServerMonkey

+0

爲什麼不告訴你,你實際上做的事情的代碼。 – Kayaman

回答

1

你需要做一個POST到

http://localhost:8080/milestones

其中包含通過其資源URL指向關聯項目的鏈接:

{ 
    "name": "milestone name", 
    "description": "milstone description", 
    "project": "http://localhost:8080/projects/1" 
} 
+0

在Alan Hay評論之後進行了測試 – ServerMonkey