Category parentCategory = entityManager.find(Category.class, 1);
Здесь вероятно вместо 1 нужно поставить parentId.
И ответ на ваш вопрос: вместо ручного инкремента largestIndex вам нужно использовать id последней добавленной записи.
Кстати раз уж вы используете hibernate то посмотрите в сторону Closure Table, этот паттерн как мне кажется более органично смотрится с hibernate.
Вот пример кода с id(обязательно обернуть в транзакцию):
public ResponseMessage addCategory(List<Category> newCategoryList, int parentId) {
Category parentCategory = parentId == 0 ? null : entityManager.find(Category.class, parentId);
for (Category category : newCategoryList) {
entityManager.persist(category);
entityManager.flush();
if (parentCategory != null) {
category.setPath(parentCategory.getPath() + "." + category.getId());
category.setParent(parentCategory);
} else {
category.setPath(String.valueOf(category.getId()));
}
}
return new ResponseMessage(true, " ");
}