Witajcie,
Mam problem z organizają kodu Encji. Moje encje:

public class Post implements Serializable {
    @Id
    @GeneratedValue
    @Column(name = "post_id")
    private Integer id;
	
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "topic_id", nullable = false)
    private Topic topic;
	
    @ManyToOne
    @JoinColumn(name = "user_id", nullable = false)
    private User creator;
	
    public Post(User user, Topic topic) {
        this.topic = topic;
        this.creator = user;
        setTopic(topic);
        setCreator(user);
    }
    public void setCreator(User creator) {
        if (this.creator != null)
            this.creator.removePost(this);
        this.creator = creator;
        creator.addPost(this);
    }
    public void setTopic(Topic topic) {
        if (this.topic != null)
            this.topic.removePost(this);
        this.topic = topic;
        topic.addPost(this);
    }
}

public class User implements Serializable {

    @Id
    @GeneratedValue
    @Column(name = "user_id")
    private Integer id;

    @OneToMany(mappedBy = "creator", cascade = CascadeType.ALL)
    private List<Post> posts;

    protected void addPost(Post post) {
        this.posts.add(post);
    }
    protected void removePost(Post post) {
        this.posts.remove(post);
    }
}

public class Topic implements Serializable {
    @Id
    @GeneratedValue
    private Integer id;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "topic")
    private List<Post> posts;

    protected void addPost(Post post) {
        this.posts.add(post);
    }
    protected void removePost(Post post) {
        this.posts.remove(post);
    }
}

Kod ten rodzi u mnie kilka pytań, którymi chciałbym się tutaj podzielić:

  • Czy nie lepiej zrobić to "na odwrót", czyli w klasach rodziców (User, Topic) za pomocą metody addPost(...), która wykona setCreator(...) i setTopic(...) oraz doda przekazaną instancję do listy?
  • Czy dodanie 2 razy tej samej instancji encji Post (do list w encjach Topic i User) nie spowoduje duplikacji rekordu w bazie? JPA będzie pilnować żeby dodać nową encję (Post) tylko 1 raz?

Liczę na wasze porady :D