Я начал 2 дня назад использовать Spring MVC, и у меня возникли некоторые проблемы с практическим примером.
Я создал базовую таблицу категорий (category_id относится к идентификатору категории):
DROP TABLE IF EXISTS `categories`;
CREATE TABLE IF NOT EXISTS `categories` (
`id` int(11) NOT NULL,
`category_id` int(11) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_CATEGORY_CATEGORY` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `categories`
ADD CONSTRAINT `FK_CATEGORY_CATEGORY` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`);
Теперь моя задача - отобразить полный список категорий со своими детьми, если они существуют ...
У меня в контроллере есть этот метод, который возвращает список в JSON:
@GetMapping(path="/categories", produces= {"application/json"})
public List<Category> getAllCategories(Model model) {
return categoryRepository.findAll();
}
Рекомендуется сделать это:
public class Category implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
@ManyToOne
private Category parentCategory;
@OneToMany(mappedBy="parentCategory", fetch = FetchType.EAGER)
private List<Category> childCategories;
... default constructor, getters & setter etc.
}
При попытке просмотра страницы я вижу категории, но не показываю, есть ли у них подкатегории или нет .... Например, эта категория должна давать список дочерних категорий ... Например, я должен иметь в дочерние категории: id = 5, name = ... и т. д., id = 6, id = 7 ...
{
"id": 1,
"name": "XXX",
"createdat": 1541872732000,
"updatedat": 1541872732000,
"parentCategory": null,
"childCategories": [
]
....
}
и эта категория, у которой есть родительская категория, не возвращает родителя, тогда как значение parentCategory должно быть 1:
{
"id": 14,
"name": "xxxxxx",
"createdat": 1541873447000,
"updatedat": 1541873447000,
"parentCategory": null,
"childCategories": [
]
....
}
Спасибо за вашу помощь.