我正在为一个学校项目创建一个网站,该网站使用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的关系。如果您需要更多信息,请询问我。
答案 0 :(得分:0)
您似乎正在尝试访问实体内部应用程序的存储库层。通常这不是一个好主意,因为实体应该只知道它们拥有的数据,而不是其他应用程序组件。
在这种特殊情况下,明智的做法是将print("hello")
类与可调用的方法结合使用,以将数据插入数据库。在该方法中,您还可以插入其他任何实体。让您的存储库成为服务的字段,并将其设置为@Service
。
答案 1 :(得分:0)
我认为您需要启用 JPA审核。通过在持久性配置中添加@EnableJpaAuditing
可以在Spring中启用它。这告诉Spring侦听JPA实体生命周期事件,并在适当的位置调用带注释的方法。
我还认为,如果仅在持久化(@PrePersist
时才应调用该方法,则应将其设为私有。
查看详细信息here。本文还介绍了实体侦听器,当处理多个需要相同预持久性功能的实体时,它们也可能是一个很好的解决方案。
答案 2 :(得分:0)
我认为您应该创建一个服务类,一个存储库类和一个将通过存储库存储的实体。获取所有内部元素并将其填充为默认值的逻辑是在服务中编写,而不是在实体类中编写的好主意。 如果您需要任何帮助,请告诉我。 欢迎来到社区!