CRUD в JPA много к одному двунаправленному отношению - PullRequest
0 голосов
/ 20 декабря 2018

Мне нужно создать отношение многие-к-одному, и я не знаю, правильно ли я это делаю, потому что я не могу корректно обновлять и удалять.Я использую Spring boot и JPA-репозиторий на Java, база данных mysql.

У меня есть сообщение с именем, каждое сообщение может иметь несколько комментариев, но мне нужно использовать все вместе, если я хочу добавить комментарий, я отправил сообщение с новым комментарием, например:

{
    "name":"PostName",
    "comment: [
        {
            "text":"comment 1"
        },
        {
            "text":"comment 2"
        }
    ]
}

Post.java

@Entity
public class Post {

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

    private String name;

    @OneToMany(cascade = CascadeType.ALL,
            fetch = FetchType.LAZY,
            mappedBy = "post")
    private List<Comments> Comments = new ArrayList<>();


    // Get and Set

    public long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

Comments.java

@Entity
public class Comments {

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

    private String text;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "post_id")
    @JsonIgnore
    private Post post;


    // Get and Set

    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }

    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }
}

PostRepository.java

public interface PostRepository extends JpaRepository<Post, Long> {

    Club findByName(@Param("name") String name);

}

Controller.java

@Autowired
PostRepository postRepository;

@RequestMapping(value="/posts", method=RequestMethod.GET, produces = "application/json")
public ResponseEntity<?> getPost(Pageable pageable){
    try {
        Page<Post> posts = postRepository.findAll(pageable);    
        return new ResponseEntity<>(posts,HttpStatus.ACCEPTED);

    } catch (Exception e) {
        e.printStackTrace();
        return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE);
    }
}


@RequestMapping(value="/newPost", method=RequestMethod.POST, produces = "application/json")
public ResponseEntity<?> newPost(@RequestBody Post post){

    try {


        for (Comments comments: post.getComments()){
            comments.setPost(post);
        }


        postRepository.save(post);
        return new ResponseEntity<>(HttpStatus.CREATED);

    } catch (Exception e) {
        e.printStackTrace();
        return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE);
    }
}

Я не знаю, правильна ли моя работа, и мне нужны методы обновления и удаления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...