2016-11-29 170 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