У меня есть два объекта, которые могут быть прокомментированы пользователем (скажем, например: новости и статьи). Можно ли использовать один объект Comment и привязать его к обоим объектам?JPA - привязка объекта к нескольким другим объектам
Я попробовал это, создав абстрактный суперкласс (AbstractCommentableEntity
), который обрабатывает отношение к комментариям (будет CommentabeEntity1
и). Затем новости и статьи будут расширять этот класс, и было бы возможно приложить к ним комментарии. Посмотрите мое изображение, а также мой код.
Но если я реализую его так, я получаю исключение сопоставления. Я думаю, это потому, что я пытаюсь отобразить аннотированный класс @MappedSuperclass. Есть ли способ, как я могу это запустить?
Мой комментарий entiy будет выглядеть следующим образом:
@Entity
public class Comment {
private AbstractCommentableEntity commentableEntity;
@ManyToOne
@JoinColumn
public AbstractCommentableEntity getCommentableEntity() {
return commentableEntity;
}
public void setCommentableEntity(AbstractCommentableEntity commentableEntity) {
this.commentableEntity = commentableEntity;
}
}
абстрактный суперкласс для commentable сущностей будет выглядеть так:
@MappedSuperclass
public abstract class AbstractCommentableEntity {
Set<Comment> comments = new HashSet<Comment>();
@OneToMany(mappedBy = "commentableEntity")
public Set<Comment> getComments() {
return comments;
}
public void setComments(Set<Comment> comments) {
this.comments = comments;
}
}
И конкретный объект будет просто расширить его например:
public class CommentabeEntity2 extends AbstractCommentableEntity{
}