Почему весенний отдых данных поддерживает произвольный порядок наследуемых объектов - PullRequest
0 голосов
/ 08 ноября 2018

Я сталкиваюсь с проблемой с упругостью данных, когда сортировка применяется только к экземплярам в реализациях сущностей, а не ко всему набору результатов.

Сущность:

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "Entity_Type")
public abstract class BaseEntity implements Identifiable<Long> {
    public Long getId();

    @ManyToOne
    RelatedEntity related;
}

@Entity
@DiscriminatorValue("Entity1")
public class Entity1 extends BaseEntity { }

@Entity
@DiscriminatorValue("Entity2")
public class Entity2 extends BaseEntity { }

Хранилища:

@NoRepositoryBean
public interface AbstractEntityRepository<T extends BaseEntity> extends PagingAndSortingRepository<T, Long> {
   List<T> findByRelatedEntityId(@Param("id") Long id, Sort sort);
}

@RepositoryRestResource
public interface BaseEntityRepository extends AbstractEntityRepository<BaseEntity> { }

+ repository for each "T extends BaseEntity"

Теперь проблема:

метод поиска baseEntityRepository/search/findByRelatedEntity?id=... с указанием &sort=id,asc или &sort=id,desc правильно упорядочивает сущности в пределах «групп» сущностей, но порядок «групп» сущностей представлен произвольным образом. Произвольный порядок кажется другим для findAll, но трудно подтвердить, не зная, что именно происходит. Пример вывода:

Примеры:

рода = идентификатор, по возрастанию

{
    "_embedded": {
        "entity1s": [ "id": 1... ],
        "entity2s": [ "id": 3... ],
        "entity3s": [ "id": 2,10,20,... ],   <--- illustrates order is correct within group
        "entity4s": [ "id": 4... ]
   }
}

рода = идентификатор, убывание

{
    "_embedded": {
        "entity4s": [ "id": 4... ],
        "entity1s": [ "id": 1... ],
        "entity3s": [ "id": 20,10,2... ],  <--- illustrates order is correct within group
        "entity2s": [ "id": 3] 
   }
}

Вопросы:

1 - Как "группы" называются в данных покоя весной?

2 - В чем причина произвольного порядка? Почему entity3s (самый низкий ID = 2) не предшествует entity2s (самый низкий ID = 3) в первом примере?

3 - Могу ли я получить объекты, отсортированные по идентификатору, даже если они перепутали объекты?

4 - Для findAll, почему результат отличается для нумерации страниц (первые 20 записей) и полного вывода? (&size=1000)

...