Ответы пользователя по тегу Java
  • Как именовать два метода один из которых выбрасывает исключение?

    @gsaw
    "find" как бы подразумевает, что можно и не найти, а "get" имхо звучит жёстче.
    getById (Checked)
    findById (Optional)
    Ответ написан
    Комментировать
  • Как правильно настроить типизацию Comporator класса?

    @gsaw Автор вопроса
    Все дело было в "safeCompare". Он вносил сумятицу. Без него все выходит норм

    return Objects.compare(o1, o2,
                    Comparator.<Worker, String>comparing(key -> key.fio().surname())
                            .thenComparing(key -> key.fio().name())
                            .thenComparing(Worker::salary)
                            .thenComparing(Worker::hiredOn));


    Но так как у меня null значения, приходится делать так. Лучшего ничего не придумал.

    class WorkerComparator implements Comparator<Worker> {
        final static Comparator<String> safeString = Comparator.nullsFirst(Comparator.naturalOrder());
        final static Comparator<Integer> safeInteger = Comparator.nullsFirst(Comparator.naturalOrder());
        final static Comparator<LocalDateTime> safeLocalDateTime = Comparator.nullsFirst(Comparator.naturalOrder());
    
        @Override
        public int compare(Worker o1, Worker o2) {
    
            return Objects.compare(o1, o2,
                    Comparator.<Worker, String>comparing(key -> key.fio().surname(), safeString)
                            .thenComparing(key -> key.fio().name(), safeString)
                            .thenComparing(Worker::salary, safeInteger)
                            .thenComparing(Worker::hiredOn, safeLocalDateTime));
        }
    }


    Сделал под разные типы свой Comparator
    Ответ написан
  • Как сгенерировать мету для spring jpa?

    @gsaw Автор вопроса
    Поменял версию 6.0.1.Final на 5.4.33.Final и все заработало.
    Ответ написан
    Комментировать
  • Как добиться от ModelMapper-а, что бы он не обновлял аттрибуты entity-класса, которых нет в модели?

    @gsaw Автор вопроса
    Вот так, как в коде ниже все заработало. Почему то вариант приведенный в вопросе не работал и Ноды не игнорировались.
    modelMapper.addMappings(new PropertyMap<Segment, SegmentEntity>() {
                @Override
                protected void configure() {
                    skip(destination.getStartNode());
                    skip(destination.getTargetNode());
                }
            });
    Ответ написан
    Комментировать
  • Найти работу java без опыта и образовния - невозможно?

    @gsaw
    Знаниие java малая часть того, что хочется видеть в программисте. Это и опыт, и знание теории программирования. Чистый кодописатель мало кому нужен. В проектах реальных ты зачастую по паре строчек в день пишешь.

    Попробовать сделать проект, веб приложение, с базой данных. Настроить автоматическую сборку проекта. Положить код на гитхабе и ссылаться на него. Чаще всего резюме отфутболивают "секретарши" которые в программировании не разбираются. Если написано, что нету опыта, а им требуется с опытом. То резюме сразу в корзину. Так что проект за душой иметь помогло бы. Плюс проект на гитхабе может посмотреть и технарь и оценить. Если конечно все так красиво. Spring стандарт практически, его надо знать в любом случае.
    Ответ написан
    1 комментарий
  • Почему могут не сохраняться сущности в базе данных?

    @gsaw Автор вопроса
    Моя ошибка была

    @Bean(name = "dwhTransactionManager")
        @Primary
        public PlatformTransactionManager dwhTransactionManager(@Qualifier("dwhDatasource") DataSource ds) {
            return new DataSourceTransactionManager(ds);
        }


    Вместо DataSourceTransactionManager надо было JpaTransactionManager использовать. Получалось, что JpaRepository не работали как надо. Данные запрашивать можно было, а запись в нирвану уходила. Поменял на JpaTransactionManager и все заработало.
    Ответ написан
    Комментировать
  • Как импортировать проект1.jar в проект2.jar?

    @gsaw
    Вот по ссылке пример, как создать ClassLoader из jar файла. Ну а потом пользуясь этим ClassLoader-ом можно загрузить манифест и прочитать его, и как в том же примере подгрузить класс.

    https://stackoverflow.com/questions/60764/how-to-l...

    Только надо учесть, вероятно (сам не проверял) таким образом загруженный класс не увидит другие классы, тобишь если у него будут зависимости, то придется грузить и зависимости, иначе класс не загрузится.
    Ответ написан
  • Какой класс использует метод открытой адресации при коллизии?

    @gsaw
    Я так думаю вопрос в том, какие collection классы в Яве используют open hashing. Насколько я понимаю отличие open hashing и closed hashing в следующем. При closed hasing ключи в хэштаблице хранятся в одном массиве и для адресации делаются математические вычисления с хэшем. Типа как пиксели в буффере экранной памяти (y * SCREENWIDTH + x). В случае же с open hashing ключи с одинаковым хэшем складываются в свои списки и уже в списках ищутся элементы compare методом.

    Если я правильно понял вопрос, то это может быть HashMap. HashMap складывает ключи с одинаковым хэшем в свои TreeMap если я ничего не путаю.
    Ответ написан
    2 комментария
  • Есть ли необходимость связывать сущности в БД, если я их связываю через spring data jpa в коде?

    @gsaw
    Если имеется ввиду, нужны ли констрейнты в базе данных, то нет, необязательно. Они нужны, что бы гарантировать целостность данных в базе данных ну и как средство документирования. Пока программа работает правильно, что они есть, что их нету. В один прекрасный момент ваша программа или сторонняя начнет писать мусор в базу данных, и с констрейнтами вы отловите это очень быстро. Без них начнет все сыпаться, так как JPA ожидает связанный объект а там null.

    Если имеется ввиду, нужны ли первичные и сторонние ключи в табличках, то скорее всего да.
    Ответ написан
    1 комментарий
  • HashMap коллизия?

    @gsaw
    Хэш код нужен только для распределения ключей по группам (спискам). А поиск осуществляется простым перебором по списку и сравнением equal.

    То есть создаёте к примеру два списка. При добавлении объекты с четным хэшем кладете в первый список, с нечётным в другой. Так же и поиск. Если хэш чётный перебираете первый список, нечётный второй.

    Получается эффективнее в два раза чем просто один список. Если хэш делить на четыре или восемь групп, то будет ещё эффективнее при большем количестве элементов.

    Или вопроса не понял.
    Ответ написан
    Комментировать
  • Как сделать валидацию пользователя?

    @gsaw
    Непонятный вопрос конечно, но наверное так

    try {
        validateUser()
        System.out.println("Проходите")
    } catch( AccessDeniedException e) {
        System.out.println("Не положено!")
    }
    Ответ написан
    6 комментариев
  • Как получить значения массива регуляркой?

    @gsaw
    Не думаю, что так можно. Проще и понятнее сделать в два шага, сначала вытащить из квадратных скобок содержимое

    "bla":\[([^\]]*)\]

    А потом из найденного содержимого квадратных скобок получить все группы

    "([0-9]+)"

    String input = "\"bla\":[\"1000\",\"1002\",\"1\",\"22222\",\"333\",\"3333\",\"33344\"]";
            Pattern pattern = Pattern.compile("([0-9]){1,}");
            Matcher matcher = pattern.matcher(input.replaceAll("\"bla\":\\[([^\\]])\\]", "$1"));
            while (matcher.find()) {
                System.out.println("g:"+ matcher.start() + " " + matcher.group());
            }


    А если не советовать split, то проще наверное gson использовать. Там можешь json структуру обойти и получить массив не избретая велосипед и не обязательно
    Ответ написан
    Комментировать
  • [spring jpa repository] как правильно deleteInBatch?

    @gsaw Автор вопроса
    Как только отправил вопрос, на ум пришло посмотреть документацию по deleteInBatch и там черным по белому написанно.

    Assume that we will clear the EntityManager after the call.


    Вообщем em.clear() между deleteInBatch и save помогло.
    Ответ написан
    Комментировать