Иметь приложение Java/Springboot/Thymeleaf/Hibernate/SQL
, которое позволяет администраторам публиковать новые статьи. Каждая статья связана с конкретными темами. В SQL
у меня есть topic table
, articles table
и join table
, которые содержат articleIds
и topicsIds
.
Когда я добавляю новую статью через приложение, столбец "Topic"
в таблице статей должен заполняться тем, какое имя темы выбрано из выпадающего поля, вы можете выбрать более одной темы, поэтому в идеале столбец Необходимо собрать все выбранные названия тем.
Как вы думаете, это проблема с моей таблицей sql
, или мне нужно каким-то образом настроить выбранные темы в моем контроллере? Я попытался установить его в контроллере, но не уверен, что правильно его получаю, поскольку из тем можно выбрать несколько "topic"
... есть идеи?
Вот мой код для модели Article.
@Entity
@Table(name="Article")
@EntityListeners(AuditingEntityListener.class)
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ArticleId")
private Long id;
@LastModifiedDate
@DateTimeFormat(pattern = "MM/dd/yyyy HH:mm a")
private LocalDateTime lastModifiedDate;
private String title;
private String urlTitle;
private String contentHtml;
private String contentText;
private String topic;
@ManyToMany(fetch = FetchType.LAZY,
cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
})
@JoinTable(name = "Article_Topics",
joinColumns = { @JoinColumn(name = "Article") },
inverseJoinColumns = { @JoinColumn(name = "Topic") })
private Set<Topic> topics= new HashSet<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUrlTitle() {
return urlTitle;
}
public void setUrlTitle(String urlTitle) {
this.urlTitle = urlTitle;
}
public String getContentHtml() {
return contentHtml;
}
public void setContentHtml(String contentHtml) {
this.contentHtml = contentHtml;
}
public String getContentText() {
return contentText;
}
public void setContentText(String contentText) {
this.contentText = contentText;
}
public Set<Topic> getTopics() {
return topics;
}
public void setTopics(Set<Topic> topics) {
this.topics = topics;
}
public String getTopic() {
return topic;
}
public void setTopic(String topic) {
this.topic = topic;
}
public LocalDateTime getLastModifiedDate() {
return lastModifiedDate;
}
public void setLastModifiedDate(LocalDateTime lastModifiedDate) {
this.lastModifiedDate = lastModifiedDate;
}
}
Вот код для контроллера, когда вы сохраняете новую тему:
@RequestMapping(value="/save-article")
public String addArticle(Model model, @ModelAttribute(value="article")Article newArticle, @ModelAttribute(value="topics")Article topics){
String newArticleName = newArticle.getTitle().replaceAll("\\s","");
newArticle.setUrlTitle(newArticleName);
articleRepository.save(newArticle);
return adminHome(model);
}