У меня есть два объекта Статья и категория. Существует много-много отношений. В базе данных я использую промежуточную таблицу для этого - article_category, как на картинке.JSP-файл не извлекает данные из таблицы с многими-ко-многим (спящий режим)
http://i.stack.imgur.com/Qji5u.jpg
Когда я использую OneToMany связь между объектами другого в моем проекте, это работает. У меня проблемы только с ManyToMany. Я хотел бы получить название категории соответствующей статьи, когда я пытаюсь в jsp-файле в конце гостевой комнаты. Что я делаю неправильно?
Существует мой код:
Article.class
@Entity
public class Article {
@Id
@GeneratedValue
private Integer id;
private String title;
private String content;
private Date publishDate;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "article_category",
joinColumns={@JoinColumn(name="article_id")},
inverseJoinColumns={@JoinColumn(name="category_id")})
private List<Category> categories;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getPublishDate() {
return publishDate;
}
public void setPublishDate(Date publishDate) {
this.publishDate = publishDate;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<Category> getCategories() {
return categories;
}
public void setCategories(List<Category> categories) {
this.categories = categories;
} }
Category.class
@Entity
public class Category {
@Id
@GeneratedValue
private Integer id;
private String name;
@ManyToMany(mappedBy = "categories")
private List<Article> articles;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Article> getArticles() {
return articles;
}
public void setArticles(List<Article> articles) {
this.articles = articles;
}}
IndexController.class
@Controller
общественного класса IndexController {
@Autowired
UserService userService;
@Autowired
CategoryService categoryService;
@Autowired
ArticleService articleService;
@RequestMapping("/index")
public String index(Model model) {
model.addAttribute("users", userService.findAll());
model.addAttribute("categories", categoryService.findAll());
model.addAttribute("articles", articleService.findAll());
return "index";
}
@RequestMapping("/article/{id}")
public String ArticleDetail(Model model, @PathVariable Integer id) {
Article article = articleService.findById(id);
model.addAttribute("article1", article);
return "index";
}}
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="../layouts/taglibs.jsp"%>
<div class="blog-post">
<c:forEach items="${articles}" var="article">
<h2 class="blog-post-title">${article.title}</h2>
<p class="blog-post-meta">${article.publishDate}</p>
<p>${article.content}</p>
</c:forEach>
<p>${article1.user.name}</p>
<p>${article1.user.email}</p>
<p>${article1.category.name}</p> <!-- IT DOES NOT WORK -->
</div>
См. Обновление выше –
Это все еще не работает :(Я попробовал это и то же исключение. Не могу понять, что может быть неправильным. –
Я решил это сам, когда добавил ** fetch = FetchType.EAGER ** to ** @ ManyToMany ** аннотация. –