Ответы пользователя по тегу JDBC
  • Как сохранить данные в PostgreSQL в Spring Data JDBC?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Да, можно каскадно. Можно выставить CascadeType.ALL или как вариант выбрать только MERGE & PERSIST
    Ответ написан
    Комментировать
  • Как в слое DAO при помощи JDBC получить корректную сущность?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    В Hibernate при использовании аннотации ManyToMany создаются 3 таблицы. 2 таблицы для самих сущностей, где хранится информация и 1 таблица с маппингами, где хранятся id сущностей. В данном случае с вашими таблицами все в порядке.

    У возвращаемого автора должны быть проинициализированы поля books и genres. Там должны находится
    книги которые писал автор и жанры в которых он работал. В свою очередь у каждой книги должна быть
    информация в каком жанре она написана и какие у нее авторы. А жанр должен хранить список книг относящихся к нему
    и авторов работающих в данном жанре.


    При такой работе (при сериализации данных или при вызове метода toString) вы столкнетесь с рекурсией. Например, у автора есть список книг, у книг есть авторы и каждый раз будут вызваны методы, которые будут запрашивать то авторов, которые написали эту книгу, то книги, которые был написаны этим автором. Эти вопросы при работе с Jackson решаются при помощи аннотаций JsonManagedReference & JsonBackReference или JsonIgnore. Для lombok для исключения из toString можно использовать ToString.Ignore.

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

    Если мы говорим о hibernate (jpa), то там есть таккие параметры, как FetchType (EAGER & LAZY). Так вот, если LAZY, то информация из List будет загружена только при обращении к ней. В случае EAGER информация загружается при первом же обращении к сущности.
    https://thorben-janssen.com/entity-mappings-introd...

    Возможно, что эта ссылка будет полезна для вас:
    https://stackoverflow.com/questions/21956042/mappi...
    Ответ написан
  • Как найти таблицу в нужной схеме MySQL?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Думаю, что данный вопрос отпадет, когда вы познакомитесь с технологией ORM и с таким фреймворком, как например, Hibernate. Если вкратце, то там есть опция, которая при запуске проверяет наличие таблиц и в случае отсутствия оных, создает таблицы автоматически. Но как правило, на production таблицы автоматически не создают.
    Обычно, пишут sql скрипты, которые впоследствии мигрируются при помощи таких фреймворков, как например, flyway.
    Таким образом, с учетом того, что вы работаете по принципу database first (т.е. вы создаете БД, схему и таблицу), то ситуации, когда не будет нужная таблица не должно быть. А даже если такая ситуация будет, то пускай выбрасывается исключение и приложение падает. Можете также ознакомиться с такими терминами. как database first, code first, model first.
    Ответ написан
    Комментировать
  • Стоит ли изучать JDBC?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Да, однозначно стоит. Можете также взять и написать пару пет-проектов с использованием jdbc + mysql, postgres и т.д.
    Также вдобавок будет очень полезным, если вы изучите такие технологии, как Hibernate (ORM), EclipseLink
    Ответ написан
    Комментировать
  • Как сделать авторизацию с тремя параметрами?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Я например, когда реализую это на Spring, то на стадии авторизации выбираю активных пользователей с нужными правами и нахожу юзера по email.
    Код, который я использую для Spring

    @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
          auth.jdbcAuthentication()
                  .dataSource(dataSource)
                  .passwordEncoder(passwordEncoder())
                  .usersByUsernameQuery("SELECT user_email, user_password, user_active FROM users WHERE user_email=?")
                  .authoritiesByUsernameQuery("SELECT u.user_email, ur.roles FROM users u INNER JOIN user_roles ur ON u.user_id=ur.user_id WHERE user_email=?");
        }
    Ответ написан
    Комментировать