• Реализовать вывод результата поиска, с выбором среди результатов?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Если вы решили реализовать полнотекстовой поиск, то такие библиотеки, как Hibernate Search, ElasticSearch, Apache Lucene вам в помощь.

    Теперь, что касается вашего функционала, то вот ошибка:
    "Error resolving template [autocomplete], template might not exist or might not be accessible".
    Он не видит шаблон autocomplete.

    Так как не вижу вашего кода, то сделаю смелое предположение, что класс в котором находится эндпоинт autocomplete аннотиирован @Controller
    И если uri - add_trackable возвращает ваш шаблон и корректно работает, то autocomplete не будет работать, так как вы выполняете ajax запрос. Тут 2 варианта - вынести этот эндпоинт в отдельный класс и обозначить, как @RestController . Или же к этому методу добавить @ResponseBody
    К слову, прочитайте про разница @Controller и @RestController
    Ответ написан
    Комментировать
  • Как правильно подключиться к двум ДБ?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Вот, как это делаю я:
    1) yaml конфигурация
    spring:
      datasource:
        db_1:
          url: jdbc:postgresql://localhost:5432/DB_NAME
          jdbc-url: jdbc:postgresql://localhost:5432/DB_NAME
          username: username
          password: password
          driver-class-name: org.postgresql.Driver
          jpa:
            show-sql: true
            open-in-view: false
            generate-ddl: true
            database-platform: org.hibernate.dialect.PostgreSQL10Dialect
            properties:
              hibernate:
                format_sql: true
                order_inserts: true
                order_updates: true
                jdbc:
                  batch_size: 15
                globally_quoted_identifiers: true
                globally_quoted_identifiers_skip_column_definitions: true
                query:
                  plan_cache_max_size: 4096
                  #fail_on_pagination_over_collection_fetch: true
                  in_clause_parameter_padding: true
            hibernate:
              ddl-auto: update
        db_2:
          url: jdbc:postgresql://localhost:5432/DB_NAME_2
          jdbc-url: jdbc:postgresql://localhost:5432/DB_NAME_2
          username: username
          password: password
          driver-class-name: org.postgresql.Driver
          jpa:
            show-sql: true
            open-in-view: false
            generate-ddl: true
            database-platform: org.hibernate.dialect.PostgreSQL10Dialect
            properties:
              hibernate:
                format_sql: true
                order_inserts: true
                order_updates: true
                jdbc:
                  batch_size: 15
                globally_quoted_identifiers: true
                globally_quoted_identifiers_skip_column_definitions: true
                query:
                  plan_cache_max_size: 4096
                  #fail_on_pagination_over_collection_fetch: true
                  in_clause_parameter_padding: true
            hibernate:
              ddl-auto: update
      jackson:
        serialization:
          FAIL_ON_EMPTY_BEANS: false


    2) Java конфигурация для первой БД
    @Configuration
    @EnableTransactionManagement
    @RequiredArgsConstructor
    @EnableJpaRepositories(
            basePackages = {"com.example.db1.repository"},
            entityManagerFactoryRef = "db1EntityManagerFactory",
            transactionManagerRef = "db1EntityManagerFactory"
    
    )
    public class DB1JpaConfig {
    
        private final Environment env;
    
        @Bean
        @Primary
        @ConfigurationProperties("spring.datasource.db1")
        public DataSourceProperties db1DataSourceProperties() {
            return new DataSourceProperties();
        }
    
    
        @Bean(name = "db1DataSource")
        @Primary
        public DataSource db1DataSource() {
            return db1DataSourceProperties()
                    .initializeDataSourceBuilder()
                    .build();
        }
    
        @Bean(name = "db1EntityManagerFactory")
        @Primary
        public LocalContainerEntityManagerFactoryBean db1EntityManagerFactory(
                @Qualifier("db1DataSource") DataSource dataSource,
                EntityManagerFactoryBuilder builder) {
            HashMap<String, Object> properties = new HashMap<>();
            properties.putAll(hibernateProperties());
            properties.putAll(enversProperties());
    
            return builder
                    .dataSource(dataSource)
                    .properties(properties)
                    .packages("com.example.db1.model")
                    .build();
        }
    
        /**
         * Hibernate properties
         * @return Map of properties for Hibernate
         */
        private Map<String, Object> hibernateProperties() {
            HashMap<String, Object> properties = new HashMap<>();
            properties.put("hibernate.hbm2ddl.auto", env.getProperty("spring.datasource.db1.jpa.hibernate.ddl-auto"));
            properties.put("hibernate.dialect", env.getProperty("spring.datasource.db1.jpa.database-platform"));
            properties.put("hibernate.globally_quoted_identifiers", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.globally_quoted_identifiers"));
            properties.put("hibernate.globally_quoted_identifiers_skip_column_definitions", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.globally_quoted_identifiers_skip_column_definitions"));
            properties.put("hibernate.default_schema", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.default_schema"));
            properties.put("hibernate.format_sql", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.format_sql"));
            properties.put("hibernate.show_sql", env.getProperty("spring.datasource.db1.jpa.show-sql"));
            properties.put("hibernate.order_inserts", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.order_inserts"));
            properties.put("hibernate.order_updates", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.order_updates"));
            properties.put("hibernate.jdbc.batch_size", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.jdbc.batch_size"));
            properties.put("spring.jpa.open-in-view", env.getProperty("spring.datasource.db1.jpa.open-in-view"));
            properties.put("spring.jpa.generate-ddl", env.getProperty("spring.datasource.db1.jpa.generate-ddl"));
            return properties;
        }
    
    
    
        @Bean(name = "db1EntityManagerFactory")
        @Primary
        public PlatformTransactionManager db1EntityManagerFactory(
                @Qualifier("db1EntityManagerFactory") LocalContainerEntityManagerFactoryBean db1EntityManagerFactory) {
            return new JpaTransactionManager(Objects.requireNonNull(db1EntityManagerFactory.getObject()));
        }
    }


    Java конфигурация для 2-й БД (аналогична первому практически)
    @Configuration
    @EnableTransactionManagement
    @RequiredArgsConstructor
    @EnableJpaRepositories(
            basePackages = {"com.example.db2.repository"},
            entityManagerFactoryRef = "db2EntityManagerFactory",
            transactionManagerRef = "db2EntityManagerFactory"
    
    )
    public class DB2JpaConfig {
    
        private final Environment env;
    
        @Bean
        @Primary
        @ConfigurationProperties("spring.datasource.db2")
        public DataSourceProperties db2DataSourceProperties() {
            return new DataSourceProperties();
        }
    
    
        @Bean(name = "db2DataSource")
        @Primary
        public DataSource db2DataSource() {
            return db2DataSourceProperties()
                    .initializeDataSourceBuilder()
                    .build();
        }
    
        @Bean(name = "db2EntityManagerFactory")
        @Primary
        public LocalContainerEntityManagerFactoryBean db2EntityManagerFactory(
                @Qualifier("db2DataSource") DataSource dataSource,
                EntityManagerFactoryBuilder builder) {
            HashMap<String, Object> properties = new HashMap<>();
            properties.putAll(hibernateProperties());
            properties.putAll(enversProperties());
    
            return builder
                    .dataSource(dataSource)
                    .properties(properties)
                    .packages("com.example.db2.model")
                    .build();
        }
    
        /**
         * Hibernate properties
         * @return Map of properties for Hibernate
         */
        private Map<String, Object> hibernateProperties() {
            HashMap<String, Object> properties = new HashMap<>();
            properties.put("hibernate.hbm2ddl.auto", env.getProperty("spring.datasource.db2.jpa.hibernate.ddl-auto"));
            properties.put("hibernate.dialect", env.getProperty("spring.datasource.db2.jpa.database-platform"));
            properties.put("hibernate.globally_quoted_identifiers", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.globally_quoted_identifiers"));
            properties.put("hibernate.globally_quoted_identifiers_skip_column_definitions", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.globally_quoted_identifiers_skip_column_definitions"));
            properties.put("hibernate.default_schema", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.default_schema"));
            properties.put("hibernate.format_sql", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.format_sql"));
            properties.put("hibernate.show_sql", env.getProperty("spring.datasource.db2.jpa.show-sql"));
            properties.put("hibernate.order_inserts", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.order_inserts"));
            properties.put("hibernate.order_updates", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.order_updates"));
            properties.put("hibernate.jdbc.batch_size", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.jdbc.batch_size"));
            properties.put("spring.jpa.open-in-view", env.getProperty("spring.datasource.db2.jpa.open-in-view"));
            properties.put("spring.jpa.generate-ddl", env.getProperty("spring.datasource.db2.jpa.generate-ddl"));
            return properties;
        }
    
    
    
        @Bean(name = "db2EntityManagerFactory")
        @Primary
        public PlatformTransactionManager db2EntityManagerFactory(
                @Qualifier("db2EntityManagerFactory") LocalContainerEntityManagerFactoryBean db2EntityManagerFactory) {
            return new JpaTransactionManager(Objects.requireNonNull(db2EntityManagerFactory.getObject()));
        }
    }


    Когда делаете запрос к БД используйте эту аннотацию:
    import org.springframework.transaction.annotation.Transactional;


    Для первой БД (например, на уровне сервиса):
    @Transactional(transactionManager = "db1TransactionManager")


    или для второй БД

    @Transactional(transactionManager = "db2TransactionManager")
    Ответ написан
    Комментировать
  • Как корректно составить запрос на выборку?

    Maksim_64
    @Maksim_64
    Data Analyst
    левый join по двум колонкам. Что то типа такого.
    select * 
    from short t1 
    left join collect_s t2
    	on t1.base = t2.base and t1.small = t2.collect
    where t2.base is null
    Ответ написан
    4 комментария
  • Как осуществить переход из одного switch-case в другой и вернуться обратно?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Читайте про конечные автоматы.
    Ответ написан
    Комментировать
  • Как подключить ROOM к существующей базе?

    @402d
    начинал с бейсика на УКНЦ в 1988
    https://developer.android.com/training/data-storag...

    prepopulate - предварительно заселить - вот такой термин для готовой (с данными) базы данных

    room работает с SQLITE форматом . просто погуглите о том что для нее существует.
    Ответ написан
    Комментировать
  • В чем проблема не корректного исполнения запроса ROOM?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    А так?

    public class Stages {
        ......
        public int ID;
        public String DESC;
    
        @Override
        public String toString() {
            return "Stages{" +
                    "ID=" + ID +
                    ", DESC='" + DESC + '\'' +
                    '}';
        }
    }
    Ответ написан
    8 комментариев
  • Передать значение в форме?

    @alexalexes
    <form action="/index.php" method="POST" >
      <input name='pers_delete' type='hidden' value="сюда подставляете значение переменной"/>  
      <input name='submit' type='submit' value="1" class='del_pers'/> 
    </form>

    <?php
       if (isset($_POST['submit']))
       {
         echo $_POST['pers_delete'];
       }
    ?>
    Ответ написан
    Комментировать
  • Как создать таблицу на странице в зависимости от переменной?

    websitedev
    @websitedev
    Веб-разработчик. Разрабатываю сложные сайты.
    SELECT * FROM table;

    Потом полученные данные из БД крутите через цикл foreach, например,

    <table>
      <tr>
        <th>Id</th>
        <th>Name</th>
      </tr>
      <?php foreach ($data as $item) {?>
      <tr>
        <td><?=$item['id']?></td>
        <td><?=$item['name']?></td>
      </tr>
      <?php }?>
    </table>
    Ответ написан
    1 комментарий
  • Как сделать запрос к двум таблицам SQL?

    Vindicar
    @Vindicar
    RTFM!
    Каждое место резервируется на одну дату, не на интервал? Тогда сравнительно просто.
    Делаешь LEFT JOIN, слева - таблица мест, справа таблица резервов, соединяешь по совпадению id места И совпадению даты резерва с назначенной.
    Тогда те места, у которых на назначенную дату нет резерва, будут иметь в соответствующих столбцах (типа id юзера) NULL. Тогда если поставить WHERE id юзера IS NULL, останутся только места, свободные на эту дату.
    Ну а выбор случайного как обычно: ставишь ORDER BY RANDOM() LIMIT 1

    Я бы так к этому подошёл, во всяком случае. Может, есть способ лучше.
    Ответ написан
    4 комментария
  • Сохранить значение переменной без обновления страницы?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Можно:

    1. Использовать Ajax запросы. Все значения на фронте у вас будут целыми, вы можете менять их и отправлять с каждым запросом.

    2. Отправлять значения в скрытых полях, и возвращать обратно так же.

    3. Использовать сессию для хранения промежуточных состояний.
    Ответ написан
    1 комментарий
  • Как вернуть опредленное значение, если запрос выдает название колонки?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT COALESCE( 
        (
            SELECT busy FROM `all_reservs` WHERE dates ='27.06.22' AND number='22' LIMIT 1
        ), 
        'no'
    ) AS busy;

    Если запрос вернёт запись (с одним полем), скаляризация преобразует её в значение, и COALESCE вернёт это значение.
    Если запрос не вернёт запись, скаляризация вернёт NULL, и COALESCE вернёт 'no'.
    LIMIT страхует от возврата более чем одной записи. По-хорошему ещё надо добавить ORDER BY.
    Ответ написан
    1 комментарий
  • Как вывести на php результат SELECT COUNT(*) из MySql?

    toxa82
    @toxa82
    У вас кавычки в запросе не правильные
    $query = $mysql->query('SELECT COUNT(*) as count FROM `monitor_two` WHERE `date`='сегодня' AND `bysy`='нет'');

    Вы то фаталы и ловите потому что у вас запрос неправильный. Должен получиться в результате объект mysqli_result из которого вы уже и получаете результат с помощью его методов. Если у вас там false значит получайте ошибку и смотрите что не нравиться ему.
    Ответ написан
    2 комментария
  • Почему не происходит добавление записей в БД?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Не нужно брать в кавычки имена таблиц и колонок. Вместо кавычек используют Машинописный обратный апостроф:
    <?php
    $mysqli->query("SET NAMES 'utf8'");
    
    $mysqli->query("CREATE TABLE `geolocal` (
                `id` INT AUTO_INCREMENT,
                `names` VARCHAR(50),
                `pass` VARCHAR(20),
                `email` VARCHAR (50),
                PRIMARY KEY(`id`)
                )"
    );
    
    $mysqli->query(
        "INSERT INTO `geolocal` (`names`,  `pass`,  `email`) VALUES ('spiderman',  'pautinka',  's.pider@list.ru')"
    );
    
    $mysqli->close();


    run PHP online

    UPD: А ещё не следует использовать модуль mysql . Используйте mysqli или PDO
    Ответ написан
    5 комментариев