创建实体时如何将数据插入数据库?

时间:2019-06-01 15:37:08

标签: java spring spring-boot

我正在为一个学校项目创建一个网站,该网站使用spring作为后端。当新数据保存到特定表时,我正在尝试将数据插入数据库。

我尝试使用@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());
}

插入人员时(通过OAuth登录),该代码应将人员的“资格”设置为默认值。默认情况下,每个“ Kompetenz”的值应为0。 Kompetenz与资格有1到n的关系。如果您需要更多信息,请询问我。

3 个答案:

答案 0 :(得分:0)

您似乎正在尝试访问实体内部应用程序的存储库层。通常这不是一个好主意,因为实体应该只知道它们拥有的数据,而不是其他应用程序组件。

在这种特殊情况下,明智的做法是将print("hello")类与可调用的方法结合使用,以将数据插入数据库。在该方法中,您还可以插入其他任何实体。让您的存储库成为服务的字段,并将其设置为@Service

答案 1 :(得分:0)

我认为您需要启用 JPA审核。通过在持久性配置中添加@EnableJpaAuditing可以在Spring中启用它。这告诉Spring侦听JPA实体生命周期事件,并在适当的位置调用带注释的方法。

我还认为,如果仅在持久化(@PrePersist时才应调用该方法,则应将其设为私有

查看详细信息here。本文还介绍了实体侦听器,当处理多个需要相同预持久性功能的实体时,它们也可能是一个很好的解决方案。

答案 2 :(得分:0)

我认为您应该创建一个服务类,一个存储库类和一个将通过存储库存储的实体。获取所有内部元素并将其填充为默认值的逻辑是在服务中编写,而不是在实体类中编写的好主意。 如果您需要任何帮助,请告诉我。 欢迎来到社区!