Как я могу вставить данные в базу данных при создании объекта? - PullRequest
0 голосов
/ 01 июня 2019

Я создаю сайт для школьного проекта, в котором для бэкэнда используется весна. Я пытаюсь вставить данные в базу данных, когда новые данные сохраняются в конкретной таблице.

Я пытался использовать @HandleAfterCreate и @PrePersist, но ни один из них не работал. Я не очень опытен с весной. Учитель сказал нам использовать это, и теперь я не знаю, что делать.

@HandleAfterCreate
public void handlePersonBeforeCreate(Person person){
    logger.info("Inside Person Before Create....");
    Set<Qualifikation> qualifikationen = new HashSet<>();
    kompetenzRepository.findAll().forEach(kompetenz -> {
        Qualifikation qualifikation = new Qualifikation();
        qualifikation.setAusmass(0);
        qualifikation.setKompetenz(kompetenz);
        qualifikation.setPerson(person);
    });
    person.setQualifikationen(qualifikationen);
    System.out.println(person.getDisplayName());
}

Код должен установить для «Qualifikation» человека значение по умолчанию при вставке человека (через вход в систему через OAuth). Он должен иметь каждый «Компетенц» со значением 0 по умолчанию. Компетенц имеет отношение 1 к n к квалификации. Если вам нужна дополнительная информация, пожалуйста, спросите меня.

Ответы [ 3 ]

0 голосов
/ 02 июня 2019

Я думаю, вам нужно включить JPA аудит . Его можно включить в Spring, добавив @EnableJpaAuditing в вашу конфигурацию постоянства. Это говорит Spring прослушивать события жизненного цикла сущности JPA и вызывать аннотированные методы в соответствующих местах.

Также я думаю, что вы должны сделать метод обратного вызова приватным , если он должен вызываться только при сохранении (@PrePersist).

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

0 голосов
/ 07 июня 2019

Я думаю, вам следует создать класс обслуживания, класс репозитория и сущность, которая будет храниться в репозитории. Логика получения всех внутренних элементов и заполнения их значением по умолчанию должна быть написана в сервисе, а не хорошая идея писать в классе сущности. Если вам нужна помощь, дайте мне знать. Добро пожаловать в сообщество !!

0 голосов
/ 01 июня 2019

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

В этом конкретном случае было бы целесообразно использовать класс @Service с методом, который можно вызывать для вставки данных в базу данных. В методе вы могли бы затем вставить любые другие объекты. Пусть ваши репозитории будут полями сервиса и сделайте их @Autowired.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...