Ответы пользователя по тегу Hibernate
  • Как мне реализовать выборку по данным, которые пользователь вводит в JSP форме?

    zolt85
    @zolt85
    Программист
    Форма с клиента уходит методом GET, либо POST, смотря что указано в атрибуте method тега form. По-умолчанию будет GET. Данные формы будут передаваться в URL-е, который указан в атрибуте action.
    В Вашем случае строка запроса будет иметь вид
    `scheduleByStationsAndDate/?stationDeparture="data"&stationArrival="data"` ну и так далее.
    Таким образом, чтобы принять это все на сервере надо писать примерно так:
    @RequestMapping(value="scheduleByStationsAndDate", params=["stationDeparture", "stationArrival", "dateDeparture"], method=RequestMethod.GET)
    @ResponseBody
    public String getScheduleByStationsAndDate(
        @RequestParam("stationDeparture") String stationDeparture, 
        @RequestParam("stationArrival") String stationArrival, 
        @RequestParam("dateDeparture") Date dateDeparture
    ) { ... }


    В случае POST запроса, метод может выглядеть так:
    @RequestMapping(value ="scheduleByStationsAndDate", method = RequestMethod.POST)
    @ResponseBody
    public String getScheduleByStationsAndDate(@RequestBody MyForm form) {...}

    Основная мысль думаю понятна. MyForm в данном случае обычный POJO в который Spring попытается смаппить данные пришедшие с клиента, в Вашем случае MyForm может выглядеть так
    public class MyForm {
    
        private String stationDeparture;
        
        private String stationArrival;
    
        private Date dateDeparture;
    
        //тут еще геттеры/сеттеры, ну всё как мы любим
    }


    Как-то так ...
    Ответ написан
    Комментировать
  • Как в jsp привязать удалить определенный элемент из таблицы?

    zolt85
    @zolt85
    Программист
    В обработчик нажатия кнопки передавать id сущности которую хотите обработать.
    Ответ написан
    Комментировать
  • Как правильно организовать архитектуру приложения?

    zolt85
    @zolt85
    Программист
    Просто опишите их в конфигурации, Hibernate все остальное сделает за вас. Только почитайте документацию, прежде чем городить огород.
    Ответ написан
    1 комментарий
  • Почему не заводится JPA?

    zolt85
    @zolt85
    Программист
    Не удивлюсь, что ему отрывает башку обилие настроек в persistance.xml. Оставьте настройки только для Hibernate.
    Вот эти я имею ввиду.
    <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
                <property name="hibernate.connection.username" value="root"/>
                <property name="hibernate.connection.password" value="root"/>
    Ответ написан
    Комментировать
  • Откуда можно достать java проекты с ипользованием Spring Data,Hibernate,HTML,CSS,JSP,Maven?

    zolt85
    @zolt85
    Программист
    Официальная документация по всем проектам Spring. В каждом проекте есть ссылки на примеры приложений с использованием данного проекта.
    Ответ написан
    Комментировать
  • Обязательное ли использование ORM для работы с SQLite?

    zolt85
    @zolt85
    Программист
    Если хочется разобраться в вопросе, возьмите чистый JDBC и поработайте через него. Затем уже можно переползать на ORM. Тем более, что SQLite не супер навороченная СУБД. А вот если вы за СУБД возьмете какой-нибудь H2, HSQL или JavaDB, то выбор ORM расширяется до Hibernate, Mybatis и прочих
    Ответ написан
    Комментировать
  • Почему не проходит транзакция Spring+Hibernate(JPA)?

    zolt85
    @zolt85
    Программист
    В случае insert я бы посоветовал использовать метод persist вместо merge
    Ответ написан
    6 комментариев
  • Разъяснение в конфигурации Spring+Hibernate(JPA). Помощь в настройке транзакций. Почему они не проходят?

    zolt85
    @zolt85
    Программист
    Я вам не скажу за всю Одессу, но у нас в Сибири считается, что
    1) @GeneratedValue(strategy = GenerationType.TABLE) - говорит, что нужно использовать таблицу для генерации PK. Не таблицу, на которую маппится сущность, а просто таблицу. Отсюда и возникает таблица hibernate_sequences. И возникает она из-за hibernate.hbm2ddl.auto=update.
    2) Про длину колонки, это опять из-за hibernate.hbm2ddl.auto=update.
    3) @Transaction говорит, что метод будет транзакционным. Что это значит. Это значит, что вызов метода будет обернут в proxy объект, у которого будет сессия, и при вызове всех вложенных методов эта сессия будет одна и та же, и при завершении метода транзакция закроется.
    4) propagation = Propagation.REQUIRED - это означает, что наличие сессии при вызове метода обязательно, если ее нету, то hibernate попытается ее создать.
    5) Откат транзакции (rollbak грубо говоря) происходит, по-умолчанию, только в случае возникновения RuntimeException, как этим управлять написано в документации к hibernate.
    6) значение в аннотации @Repository("personDao") задает имя бина.

    Теперь по классике надо что-то по советовать. Советую Вам не использовать hibernate.hbm2ddl.auto=update. Лучше посмотрите в сторону liquibase для управления состоянием БД.
    И почитайте вводные туториалы по Spring, разберитесь как работает IoC в Spring, как работает AOP в Spring, как Spring управляет бинами. И тогда Вам станет все понятно.

    Дерзайте, удачи Вам!
    Ответ написан
    1 комментарий
  • Как встать на правильное получение данных с БД?

    zolt85
    @zolt85
    Программист
    Pattern называется "Шаблон". Идея в том, чтобы вынести общий код в один класс, тем самым избавив остальных от написания портянок по созданию коннекта к БД и его закрытию. Для универсальности можно определить интерфейс для обработки ResultSet. Тогда все запросы можно будет свести к обращению к классу шаблона с передачей ему тела запроса и обработчика ResultSet.

    Примерно может выглядеть так:
    public class SqlTemplate<T> {
    
        private String query;
        private Object[] queryParams;
    
        public SqlTemplate(String query, Object ... queryParams){
              this.query = query;
              this.queryParams = queryParams == null?new Object[0]:queryParams;
        }
    
       public T select(RsetHandler<T> handler) {
          //тут весь код по созданию коннекта
         ResultSet rs = connect.query(query, queryParams);
         return handler.handle(rs);
         //тут код по обработке ошибок и закрытию коннекта
       }
    }


    это если нет возможности или желания прикручивать к проекту ORM, а-ля Hibernate
    Ответ написан
    1 комментарий
  • Ошибка при создании entities в intellij, почему?

    zolt85
    @zolt85
    Программист
    Проблема в том, что поля сущности должны быть типизированы строками, цифрами и т.д. Пропишите типы полей правильно и будет Вам счастье.
    Ответ написан