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

我正在为一个使用 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 与 Qualifikation 具有一对一的关系。如果您需要更多信息,请问我。


森栏
浏览 153回答 3
3回答

DIEA

看起来您正在尝试访问实体内应用程序的存储库层。这通常不是一个好主意,因为实体应该只知道它们持有的数据,而不是其他应用程序组件。在这种特殊情况下,明智的做法是使用一个@Service带有方法的类,您可以调用该方法将数据插入数据库。在该方法中,您还可以插入任何其他实体。让您的存储库成为服务的领域并使它们成为@Autowired.

交互式爱情

我认为您需要启用JPA 审计。它可以在 Spring 中通过添加@EnableJpaAuditing到持久性配置来启用。这告诉 Spring 监听 JPA 实体生命周期事件并在适当的地方调用带注释的方法。此外,我认为如果回调方法仅在持久化 ( ) 时才被调用,则应将其设为私有@PrePersist。在此处查看详细信息。在本文中还介绍了实体侦听器,在处理需要相同预持久功能的多个实体时,它也可能是一个很好的解决方案。

慕姐8265434

我认为您应该创建一个服务类、一个存储库类和一个将通过存储库存储的实体。获取所有内部元素并用默认值填充它的逻辑是写在服务中而不是写在实体类中的好主意。如果您需要任何帮助,请告诉我。欢迎来到社区!!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java