• Как правильнее указывать атрибуты для тегов в JAXB?

    azerphoenix
    @azerphoenix Куратор тега Java
    Это что ж получается.... Что мне нужно на каждый подобный случай "",
    Создавать отдельный объект (класс) типа "Country_Continent"?


    Как мне кажется, да. Вам нужно создать класс с учетом структуры, которую вы хотите получить в конечном счете
  • Как работать с изображениями в веб-приложениях на Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Eugenue Cesarevich,

    Файловая система - это грубо говоря ещё одна бд, только для файлов, правильно я понимаю?

    Я имею ввиду просто диск. Если сайт на локалке, то локальный диск, а если это VPS, то диск на сервере.

    Я просто не очень понимаю, к чему вы подключаете репозиторий.

    dao & entity я использую для добавления сущности attachment в БД (PostgresSQL) для хранения информации о загружаемом файле и ссылки на него.

    А мне больше интересна просто генерация страниц с картинками...

    Ну так когда вы знаете урл к картинке, то можете достать любую картинку.
  • Как сделать то же самое к другой роли пользователя?

    Bearax, зависит от вашей цели и скорее всего от дизайна тоже.
    Скорее всего кол-во непрочитанных должно быть индивидуальным для каждого ученика и не нужно его выводить в общем списке. Т.е. ученик "А" не должен видеть кол-во непрочитанных ученика "В". Может быть в зависимости от дизайна можно обойтись одним репитером или нужно например, внутри репитера выывести еще один репитер и т.д. Зависит от того, какой структуры документ в конечном счете нужно получить.

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

    -- Учитель "А" (10)
    -- Учитель "В" (5)
    ...

    А вам нужно туда же добавить еще и учеников.

    -- Учитель "А" (10)
    ---- Ученик "А" (3)
    ---- Ученик "В" (4)
    -- Учитель "В" (5)
    ---- Ученик "А" (2)
    ---- Ученик "В" (7)
    ...

    Чтобы получить вышеуказанную структуру вам нужно репитер вложить в репитер, если об этом речь... И соответственно, получится цикл в цикле. Внешний цикл выводит учителей и кол-во непрочитанных для них, а внутренний список выводит учеников и кол-во непрочитанных для них
  • Почему треды из parallelStream в состоянии WAIT?

    azerphoenix
    @azerphoenix Куратор тега Java
    Не отвечу наверняка, но подозреваю, что это может быть из-за уровня изолированности транзакций. Так как уровень изоляции MySQL по уиолчанию read commited, то скорее всего используется блокировка на запись данных и потому другой поток ожидает... А может быть я и не прав...

    Кстати, вот выдержка из одной статьи:
    To make a long story short, you should not use transactions within a parallel stream. This is because each thread in the parallel stream has its own name thus it does participate in the transaction.


    Ссылка - https://www.javacodegeeks.com/2019/09/should-paral...
  • Каким способом лучше извлечь данные из БД?

    azerphoenix
    @azerphoenix Куратор тега Java
    Ryabos, здравствуйте!
    Подход разумный, но ведь здесь мы ничего не записываем в БД. Она пополняется вручную и программно используется только для чтения. Проблема в том, что в compile-time не известно, сколько полей находится в таблице.

    Да, если ничего в БД не планируете записывать, то DTO и не нужен.

    Проблема в том, что в compile-time не известно, сколько полей находится в таблице.

    Как-то раз столкнулся с ситуацией, когда нужно было замаппить объект, в котором могло быть потенциально разное количество полей и их было довольно много. Настолько, что их все сложно было описать в объекте (более 1500). В связи с чем я использовал другой подход - хранил Map<String, String>.


    Никаких проблем. Только какую проблему Вы предлагаете решить таким образом?

    Единственное, что меня беспокоит в данном случае это то, что один и тот же сайт спарсить захотят разные люди, но не смогут, так как одинаковые ключи невозможны. Если конечно же этот сервис вы планируете запускать на продакшне. Опять-таки тут вам виднее, так как я не вижу всей картины происходящего. Возможно, что этим приложением будет пользоваться один человек
  • Картинки на wordpress имеют такие надпись в конце ?v=1610828339?

    fvc24, вряд ли гугл и яедекс исключили картинку из индекса из-за версионирования
  • Почему REST забыл про JSON?

    azerphoenix
    @azerphoenix Куратор тега Java
    А точно ли по гайду вы сделали? Можете расшарить репозиторий?
  • Каким способом лучше извлечь данные из БД?

    azerphoenix
    @azerphoenix Куратор тега Java
    Ryabos,
    Я бы сделал это следующим образом:
    1) Создал бы DTO, в которые собираются данные из парсинга. А далее маппер, которые перегоняет их в Entity и сохраняет в БД. Можно наверное, обойтись и без DTO.

    Я решил хранить все это в таблице БД. Ключ это ссылка на страницу,

    А почему бы в качестве ключа не использовать обычный id (int, long) или uuid? А url сохранить, как одно из полей.

    Если XPath не задан, значит на странице нет этого значения, и в выходных данных не должно быть упоминания о нем.

    А тут при десериализации тем же gson или jackson null значения не отдавать на клиент и все
  • По какому принципу Spring DataJPA обновляет записи в связанных таблицах?

    azerphoenix
    @azerphoenix Куратор тега Java
    Eugenue Cesarevich, я понял вашу задачу.
    Вкратце, у вас есть связь Many-To-Many с сущностью Student (табл. students) & Course (courses). Вы хотите, чтобы при сохранении студента, старый список курсов у него удалялся, а новый добавлялся. Так? А вместо этого новые только добавляются, а старые не удаляются.
    И теперь я ожидаю, что в таблице students_courses появится связи этого студента с курсами истории и математики. А связь, например, с курсом философии будет удалена. Не помогает ни CascadeType.ALL ни PERSIST ни MERGE.

    Посмотрите на код ниже:

    Исходные данные:
    Исходный код


    @Entity
    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public class Student {
    
      @Id
      @GeneratedValue(strategy = GenerationType.AUTO)
      private Long id;
    
      @Column(name = "`name`")
      private String name;
    
      @ManyToMany(
          cascade = { CascadeType.MERGE, CascadeType.PERSIST }
      )
      @JoinTable(name = "student_courses",
          joinColumns = @JoinColumn(name = "student_id"),
          inverseJoinColumns = @JoinColumn(name = "course_id")
      )
      private List<Course> courses;
    
    }


    @Entity
    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public class Course {
    
      @Id
      @GeneratedValue(strategy = GenerationType.AUTO)
      private Long id;
    
      @Column(name = "`name`")
      private String name;
    
      @ManyToMany(mappedBy = "courses")
      private List<Student> students;
    
    }


    Инициализируем данные:
    @Component
    @RequiredArgsConstructor
    public class InitDefaultData implements CommandLineRunner {
    
      private final StudentDao studentDao;
    
      @Override
      public void run(String... args) throws Exception {
    
        Course philosophy = Course.builder().name("Philosophy").build();
        Course arithmetics = Course.builder().name("Arithmetics").build();
        Course history = Course.builder().name("History").build();
        Course medicine = Course.builder().name("Medicine").build();
    
        List<Course> oldCourses = List.of(
            philosophy, arithmetics
        );
    
        Student alex = Student.builder().name("Alex").courses(oldCourses).build();
        studentDao.save(alex);
    
        List<Course> newCourses = List.of(
            history, medicine
        );
        alex.setCourses(newCourses);
        studentDao.save(alex);
    
      }
    
    }



    В момент инициализации пользователя, когда вызывается метод save() в первый раз
    Student alex = Student.builder().name("Alex").courses(oldCourses).build();
        studentDao.save(alex);


    Таблица имеет следующий вид:
    6001d20fd4012162114380.png

    Далее срабатывает метод save(), который добавляет другие курсы и при этом удаляет сохраненные.
    alex.setCourses(newCourses);
        studentDao.save(alex);

    6001d25735b42568048687.png

    Удалось ли мне ответить на ваш вопрос?
  • По какому принципу Spring DataJPA обновляет записи в связанных таблицах?

    azerphoenix
    @azerphoenix Куратор тега Java
    Erik Mironov,

    По какому принципу JpaRepository обновляет/удаляет/добавляет записи в таблице связей?

    Я думаю, в данном случае автора вопроса интересует CascadeType и orphanRemoval
  • По какому принципу Spring DataJPA обновляет записи в связанных таблицах?

    azerphoenix
    @azerphoenix Куратор тега Java
    Bavashi, да ладно, не скромничайте))) Тут такие серьезные разработчики, по сравнению с которыми у меня в голове вообще "tabula rasa".
  • Как обработать следующие исключения?

    azerphoenix
    @azerphoenix Куратор тега Java
    Bavashi, да, согласен. Потому я выше и предложил использовать Pattern.
  • Как обработать следующие исключения?

    azerphoenix
    @azerphoenix Куратор тега Java
    vitya_brodov,
    нуу.. по идее если тип введенных данных не соответствует типу переменной, т.е. невозможно введенную информацию спарсить в строку или целочисленный тип и т.д., то выбрасывается исключение InputMismatchException

    System.out.println("Введите дата рождения: ");
                int birthDate = scanner.nextInt();

    Эта строка кода введет пользователя в заблуждение. Вы просите ввести дату рождения, а не возраст. Но при этом принимаете int (т.е. возраст пользователя)

    public static void readData() {
        Scanner scanner = new Scanner(System.in);
        try {
          System.out.println("Введите имя: ");
          String name = scanner.nextLine();
          System.out.println("Введите фамилию:");
          String lastName = scanner.nextLine();
          System.out.println("Введите дата рождения: ");
          int birthDate = scanner.nextInt();
          System.out.println("Введите начало год работы: ");
          int startWorking = scanner.nextInt();
        } catch (InputMismatchException exception){
          System.err.println(exception.fillInStackTrace());
        }
      }

    Вот, пример. Если вы хотите, чтобы программа не завершала работу при выбрасывании исключения, а показывала ошибку и продолжала работать, то используйте цикл while
  • Можно ли декодировать пароли из BCrypt?

    azerphoenix
    @azerphoenix Автор вопроса, куратор тега Java
    guitar_it, Да, благодарю за ответ. Уже давно разобрался в этом вопросе, но ваш ответ будет полезен тем, кто столкнется с этим.
  • Какие есть аналоги сервиса Яндекс.Маршрутизация?

    Я слышал про этот сервис. Говорят, что лучше, чем Яндекс даже. Правда, самому не доводилось работать.
  • Хочу зпомнить данные с моего андроид приложение в таблицу Postgresql но выдает ошибку в чём дело?

    azerphoenix
    @azerphoenix Куратор тега Java
    Насчёт драйвера при подключении через jdbc - погуглите postgres jdbc driver
    И обратите внимание на эту строку. Тут указывается драйвер Class.forName()
  • Почему появляется InvocationTargetException?

    azerphoenix
    @azerphoenix Куратор тега Java
    Либо использовать блок динамической инициализации...
  • Не получаеться скачать библиотеку jnius кто мжет пмочь?

    azerphoenix
    @azerphoenix Куратор тега Java
    xxxfdd,
    ну вот, ты ответил на свой вопрос.
    java version "1.8.0_121"
    Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

    у тебя java 1.8
    а JDK_HOME и JAVA_HOME ссылается на 15 jdk
    C:\Program Files\Java\jdk-15.0.1