Опитвам се да си проправя път през създаването на дървовидна структура и нейното картографиране с MyBatis. Моята маса е дефинирана като;
CREATE TABLE `Hierarchy` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parentId` int(11) NULL DEFAULT NULL,
`name` varchar(45) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Опитах се да направя асоциация в MyBatis с;
@Select(SELECT_ALL)
@Results(value = {
@Result(property = "id", column = "id"),
@Result(property = "children", column = "parentId",
jdbcType = JdbcType.NUMERIC,
many = @Many(select = "selectById")),
@Result(property = "name", column = "name")
})
List<Hierarchy> selectAll();
Моят клас има;
private Integer id;
private Integer parentId;
private String name;
private List<Hierarchy> children;
Доста бързо разбрах, че това няма да работи, тъй като ще завърши с асоцииране назад и връщам деца многократно в набора от резултати. И така, какъв е отговорът? Трябва ли да повтарям, след като направя избора и попълвам децата си по този начин?
Опитах няколко подхода към това, но всички те изглеждат ужасно неефективни и ми е трудно да се справя с препратки към родителски идентификатори, без да повтарям списъка два пъти.
И така, някой правил ли е това преди? Каква е уловката?