2017-05-07 4 views
0
@RestController 
public class TopicController { 

    @Autowired 
    private TopicService topicService; 

    @RequestMapping(value="/topics", method= RequestMethod.GET) 
    public List<Topic> getAllTopics(){ 
     return topicService.getAllTopics(); 
    } 

    @RequestMapping(value="/topics/{id}", method= RequestMethod.GET) 
    public Topic getTopic(@PathVariable String id){ 
     return topicService.getTopic(id); 
    } 

    @RequestMapping(value="/topics", method= RequestMethod.POST) 
    public void addTopic(@RequestBody Topic topic){ 
     topicService.addTopic(topic); 
    } 

    @RequestMapping(value="/topics/{id}", method= RequestMethod.PUT) 
    public void updateTopic(@RequestBody Topic topic, @PathVariable String id){ 
     topicService.updateTopic(id, topic); 
    } 

    @RequestMapping(value="/topics/{id}", method= RequestMethod.DELETE) 
    public void deleteTopic(@PathVariable String id){ 
     topicService.deleteTopic(id); 
    } 
} 

ControllerクラスのリストPOST項目春ブーツ

@Service 
public class TopicService { 

    @Autowired 
    private TopicRepository topicRepo; 

    public List<Topic> getAllTopics(){ 
     return (List<Topic>)topicRepo.findAll(); 

    } 

    public Topic getTopic(String id){ 
     return topicRepo.findOne(id); 
    } 

    public void addTopic(Topic topic){ 
     //topics.add(topic); 

     topicRepo.save(topic); 
    } 

    public void updateTopic(String id, Topic topic) { 
     topicRepo.save(topic); 
    } 

    public void deleteTopic(String id) { 
     //topics.removeIf(t -> t.getId().equals(id)); 

     //topics.removeIf((Topic t) -> t.getId().equals(id)); 

     topicRepo.delete(id); 

    } 

} 

サービスクラス

@Repository 
public interface TopicRepository extends CrudRepository<Topic, String>{ 

    //List<Course> findByTopic_Id(String topicid); 

} 

リポジトリクラス

@Entity 
public class Topic { 

    @Id 
    @Column(name="TOPIC_ID") 
    private String id; 
    @Column(name="NAME") 
    private String name; 
    @Column(name="DESCRIPTION") 
    private String description; 

    @OneToMany(mappedBy="topic", fetch = FetchType.EAGER) 
    @JsonManagedReference 
    private List<Course> course = new ArrayList<Course>(); 

    //no - argument constructor. Needed for hibernate 
    public Topic(){}; 

    public Topic(String id, String name, String description, List<Course> course){ 
     super(); 
     this.id = id; 
     this.name = name; 
     this.description = description; 
     this.course = course; 
    } 

    public Topic(String id, String name, String description){ 
     super(); 
     this.id = id; 
     this.name = name; 
     this.description = description; 
    } 

    public String getId() { 
     return id; 
    } 

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

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public List<Course> getCourse() { 
     return course; 
    } 

    public void setCourse(List<Course> course) { 
     this.course = course; 
    } 
} 

トピッククラス

@Entity 
public class Course{ 

    @Id 
    @Column(name="COURSE_ID") 
    private String id; 
    private String name; 
    private String description; 

    //There could be many courses related to 1 topic 
    @ManyToOne 
    @JoinColumn(name = "TOPIC_ID") 
    @JsonBackReference 
    private Topic topic; 

    public Course(){}; 


    public Course(String id, String name, String description){ 

     super(); 
     this.id = id; 
     this.name = name; 
     this.description = description; 

    } 

    public Topic getTopic() { 
     return topic; 
    } 

    public void setTopic(Topic topic) { 
     this.topic = topic; 
    } 

    public String getId() { 
     return id; 
    } 

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

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

} 

コースクラス

私は、SQLデータベースに多くのコースが含まれているトピックのクラスを投稿するポストマンを使用しようとしています。ポストマンで

、私はしかし、私はすべてのトピックを取得し、対応するんとき、私の応答はそれがコースを拾っていない

{ 
    "id": "700", 
    "name": "How to countt", 
    "description": "Counting numbersssss", 
    "course": [] 
} 

たこの

{ 
    "id": "700", 
    "name": "How to countt", 
    "description": "Counting numbersssss", 
    "course": [ 
     { 
     "id": "1", 
     "name": "php", 
     "description": "gooddddyyyy stuff" 
     }, 
     { 
     "id": "2", 
     "name": "phpp", 
     "description": "gooddddyyyy stuffp" 
     } 
    ] 
} 

のようなJSONを使用してPOSTをしました私はそれを投稿した。 1つのトピックには多くのコースがあります。どのように私はこれを修正するのですか?ありがとうございました

答えて

0

双方向関連の所有側は決して設定しないでください:Course.topic

Topic.coursesにカスケードセットはありません。

トピックを保存してもそのコースは保存されませんが、その場合でもコースはトピックに属しません。

+0

私はTopic.setcourse(コース)のようにコースオブジェクトをトピックに渡す必要があるということですか? – Desmond

+0

No.トピックにはコースが1つもなく、多くのトピックがあります。そして、このコースのコレクションにはJacksonが住んでいます。その逆は真実ではない。コースにはトピックの参照がありません。したがって、各コースのトピックを設定する必要があります: 'course.setTopic(topic)'。 –