Коллекция сортировки Java и коллекция выборок БД - PullRequest
0 голосов
/ 08 марта 2019

У меня проблема, когда я пытаюсь отсортировать список объектов в Java.Я получаю другой результат, когда список объектов создается вручную или извлекается из базы данных.

Это объект:

public class CompanyRoleProperties implements Serializable {

     private String officeName;

    public CompanyRoleProperties() {
        super();
    }

    public CompanyRoleProperties(String officeName) {
        super();
        this.officeName = officeName;
    }

    public static SQLQuery createQuery(final Session session, final StringBuilder query) {
        final SQLQuery sqlQuery = session.createSQLQuery(query.toString());

         sqlQuery.addScalar("officeName", StandardBasicTypes.STRING);
         sqlQuery.setResultTransformer(Transformers.aliasToBean(CompanyRoleProperties.class));
        return sqlQuery;
    }

.... 
}

У меня есть функция, которая извлекает данные из базы данныхи создайте список этих объектов:

public List<CompanyRoleProperties> getServiceProviders() {

    final StringBuilder query = new StringBuilder(); 
    query.append("select distinct * from getCompanyRoleProperties()");
    query.append(" ORDER BY startDate DESC , endDate DESC ");
    this.log.info(query.toString());

    return CompanyRoleProperties.createQuery(this.getSessionFactory().getCurrentSession(), query).list();

}

У меня есть этот общий компаратор, который я использовал для сортировки:

public class GenericComparator<T extends Object> implements Comparator<T> {
    private SortOrder   sortType    = null;
    private String      sortField   = null;

    public GenericComparator(String sortField, SortOrder sortType) {
        this.sortType = sortType;
        this.sortField = sortField;
    }

    @SuppressWarnings("unchecked")
    @Override
    public int compare(T o1, T o2) {
        try {
            Comparable data1 = null;
            try {
                data1 = (Comparable) PropertyUtils.getProperty(o1, sortField);
            } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
                data1 = null;
            }

            Comparable data2 = null;
            try {
                data2 = (Comparable) PropertyUtils.getProperty(o2, sortField);
            } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
                data2 = null;
            }

            return ObjectUtils.compare(data1, data2) * (sortType.equals(SortOrder.ASC) ? 1 : -1);
        } catch (final Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
    }


    public static <T extends Object> void sortList(List<T> list, String sortField, SortOrder sortType) {
        final GenericComparator<T> comparator = new GenericComparator<T>(sortField, sortType);
        Collections.sort(list, comparator);
    }


}

Это тест, который я использую:

final String sortOrderProperty = "officeName";

List<CompanyRoleProperties> props = myPropertiesMapper.getServiceProviders();
System.err.println("Before DB : " + props);
props.forEach(item -> System.err.println(item));

GenericComparator.sortList(props, sortOrderProperty, SortOrder.ASC);
System.err.println("After DB : " + props);
props.forEach(item -> System.err.println(item));

List<CompanyRoleProperties> names = new ArrayList<>();
names.add(new CompanyRoleProperties("KBL European Private Bankers S.A."));
names.add(new CompanyRoleProperties("BDO Audit, S.A."));
System.err.println("Manual Before : " + names);
names.forEach(item -> System.err.println(item));
GenericComparator.sortList(names, sortOrderProperty, SortOrder.ASC);

System.err.println("Manual After : " + names);
names.forEach(item -> System.err.println(item));

, который дает мне следующий вывод:

Before DB : [CompanyRoleProperties [officeName=KBL European Private Bankers S.A. ], CompanyRoleProperties [officeName=BDO Audit, S.A.]]
CompanyRoleProperties [officeName=KBL European Private Bankers S.A. ]
CompanyRoleProperties [officeName=BDO Audit, S.A.]


After DB : [CompanyRoleProperties [officeName=KBL European Private Bankers S.A. ], CompanyRoleProperties [officeName=BDO Audit, S.A.]]
CompanyRoleProperties [officeName=KBL European Private Bankers S.A. ]
CompanyRoleProperties [officeName=BDO Audit, S.A.]



Manual Before : [CompanyRoleProperties [officeName=KBL European Private Bankers S.A., ], CompanyRoleProperties [officeName=BDO Audit, S.A., ]]
CompanyRoleProperties [officeName=KBL European Private Bankers S.A., ]
CompanyRoleProperties [officeName=BDO Audit, S.A., ]


Manual After : [CompanyRoleProperties [officeName=BDO Audit, S.A., ], CompanyRoleProperties [officeName=KBL European Private Bankers S.A., ]]
CompanyRoleProperties [officeName=BDO Audit, S.A., ]
CompanyRoleProperties [officeName=KBL European Private Bankers S.A., ]

Как вы можете видеть, список, созданный вручную, отсортирован, как и ожидалось, однако он не влияет на DB.Почему это так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...