Arhn - архитектура программирования

Spring Data JPA, как игнорировать таблицу выбора перед вставкой

Мой класс сущности имеет поле идентификатора и использует @Id, а его стратегия равна нулю. Стратегия по умолчанию - @GeneratedValue(strategy = GenerationType.AUTO)).

когда я вызываю метод сохранения JPA, он всегда вызывает sql select перед вставкой в ​​, журнал запросов выглядит следующим образом:

Первый запрос:

Hibernate: select dataeviden0_.id as id1_0_0_, dataeviden0_.block_hash as block_ha2_0_0_ from table1 dataeviden0_ where dataeviden0_.id=?

Второй запрос:

Hibernate: insert into table1 (block_hash, id) values (?, ?)

Я мог бы сам управлять идентификатором, я хочу, чтобы jpa игнорировал выбор перед вставкой, как это сделать?


  • Можете показать, как вы сохраняете объект? 17.07.2018
  • Я решаю это с помощью класса @Entity, который реализует Persistable 17.07.2018
  • а кто знает что такое Persistable? 17.07.2018
  • JPA не имеет такого метода сохранения. JPA сохраняется и объединяется 17.07.2018
  • Отвечает ли это на ваш вопрос? Принудительная вставка гибернации без операторов выбора 15.10.2020

Ответы:


1

Вы можете использовать метод persist(), а не save().

https://forum.hibernate.org/viewtopic.php?f=1&t=1011405

Однако, в отличие от save (), persist () не гарантирует, что значение идентификатора будет установлено немедленно для сохраненного экземпляра.

https://forum.hibernate.org/viewtopic.php?t=951275

Взято отсюда Принудительная вставка гибернации без операторов выбора

17.07.2018
  • Но мой класс Repository расширяет JpaRepository ‹T, Long›, JpaSpecificationExecutor ‹T›, но JpaRepository и JpaSpecificationExecutor не предоставляют persist ()? пока он предоставляет save () 17.07.2018

  • 2

    массовая вставка-существующих- data-Prevention-jpa-to-do-a-select-before-every-insert решить мой вопрос, сущность реализует Persistable и переопределить isNew () {return false; }, он проигнорирует выбор перед вставкой, потому что

    @Transactional
    public <S extends T> S save(S entity) {
    
        if (entityInformation.isNew(entity)) {
            em.persist(entity);
            return entity;
        } else {
            return em.merge(entity);
        }
    

    это метод сохранения определит, что entityInformation.isNew (entity) false, и достигнет моей цели.

    19.07.2018

    3

    Теперь уже не удаленный ответ @Alien в основном правильный. Этот оператор исходит из Spring Data JPA с использованием merge, и если вы используете persist, он должен исчезнуть.

    Для этого вам нужно будет предоставить метод persist в вашем репозитории. Это должно быть легко с помощью пользовательского реализация метода и внедренный EntityManager. Если вы сохраняете только новые экземпляры в этом репозитории, вы даже можете предоставить индивидуальную реализацию для существующего метода save, если хотите.

    17.07.2018
  • Я восстановил ответ, чтобы кто-нибудь мог получить выгоду ... спасибо. 24.07.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..