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