为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

森栏 2022-12-28 14:19:12
我正在为一个使用 spring 作为后端的学校项目创建一个网站。当新数据保存到特定表时,我试图将数据插入数据库。我试过使用@HandleAfterCreate 和@PrePersist,但都没有用。我对春天不是很有经验。老师让我们用它,现在我不知道做什么。@HandleAfterCreatepublic 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 具有一对一的关系。如果您需要更多信息,请问我。
查看完整描述

3 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

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

在这种特殊情况下,明智的做法是使用一个@Service带有方法的类,您可以调用该方法将数据插入数据库。在该方法中,您还可以插入任何其他实体。让您的存储库成为服务的领域并使它们成为@Autowired.


查看完整回答
反对 回复 2022-12-28
?
交互式爱情

TA贡献1712条经验 获得超3个赞

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

此外,我认为如果回调方法仅在持久化 ( ) 时才被调用,则应将其设为私有@PrePersist

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


查看完整回答
反对 回复 2022-12-28
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

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



查看完整回答
反对 回复 2022-12-28
  • 3 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信