Доброго дня всем! Сейчас переделываю архитектуру приложения, точнее его категории. Внедрил Materialized Path+ Adjacency List. И при добавлении новой категории, необходимо добавить ей полный путь. Можно ли sql запросом вытащить значения после последней точки у необходимой группы категории? Т.е есть такое значение в таблице:
PATH: 1123.3131.33 Мне нужно получить
33, т.е то, что после последней запятой. И эту операцию необходимо провести у всей подгруппы, и найти наибольшее.В коде ниже я вытаскиваю ту группу категорий, которая мне необходима, и обрабатываю их. Оптимален ли этот код? Прошу оценить способ выборки.
public ResponseMessage addCategory(List<Category> newCategoryList, int parentId) {
if (parentId == 0) {
List<Category> categoryList = entityManager.createQuery("FROM Category c Where c.parentCategory.id=null", Category.class).getResultList();
Integer largestIndex = getLargestIndex(categoryList);
for (Category category : newCategoryList) {
largestIndex++;
String newPath = largestIndex.toString();
category.setPath(newPath);
entityManager.persist(category);
}
return new ResponseMessage(true, " ");
}
Category parentCategory = entityManager.find(Category.class, parentId);
List<Category> categoryList = parentCategory.getCategoryList();
categoryList.size();
int largestIndex = getLargestIndex(categoryList);
for (Category category : newCategoryList) {
largestIndex++;
StringBuilder newPath = new StringBuilder(parentCategory.getPath());
newPath.append('.');
newPath.append(largestIndex);
parentCategory.addCategory(new Category(category.getName(), newPath));
}
return new ResponseMessage(true, " ");
}
public int getLargestIndex(List<Category> categoryList) {
int largestIndex = 0;
for (Category c : categoryList) {
String[] sequence = c.getPath().split("\\.");
int number = Integer.parseInt(sequence[sequence.length - 1]);
if (number > largestIndex)
largestIndex = number;
}
return largestIndex;
}
p.s И оптимально ли разделение условием (parentId==0)? Т.к я решил не делать единого предка, а таким образом выбирать вышестоящие по иерархии.