Я пытаюсь запутаться, настроив древовидную структуру и сопоставив ее с 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;
Я довольно быстро понял, что это не сработает, так как это приведет к обратному связыванию, и я несколько раз возвращаю дочерние элементы в набор результатов. Так какой ответ? Должен ли я выполнять итерацию после выбора и заполнения своих детей таким образом?
Я пробовал несколько подходов к этому, но все они кажутся ужасно неэффективными, и мне трудно обрабатывать прямые ссылки на родительские идентификаторы без повторения списка дважды.
Итак, кто-нибудь снял это раньше? В чем хитрость?