繁体   English   中英

通过REST进行Spring JPA

[英]Spring JPA via REST

在花了很多时间之后,我缺少了@ManyToOne和@OneToMany映射的明显内容。

我有两个要通过REST公开的类,一个Project类和一个Milestone类。 每个项目可以具有许多关联的里程碑。

    @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);        
}

在发布到localhost:8080 / projects / 1 / milestones的项目上更新URI无效,但是我可以在没有任何链接的情况下创建新项目和里程碑。

我的目标是发布项目条目,然后随着时间的推移发布里程碑条目,这将更新Project类上相关里程碑的列表。

知道有什么问题吗?

更新:

使用Python的HTTPIE实用程序,我执行了以下操作来创建初始项目:

http post localhost:8080 / projects name =“ test” description =“ test”

然后,我执行以下操作以分配里程碑:

http post localhost:8080 / milestones name =“ test” description =“ test” project =“ http:// localhost:8080 / projects / 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列为空

您需要进行POST

http:// localhost:8080 / milestones

其中包括通过其资源URL链接到关联项目的链接:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM