Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建实体时,如何将数据插入数据库?_Java_Spring_Spring Boot - Fatal编程技术网

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

Java 创建实体时,如何将数据插入数据库?,java,spring,spring-boot,Java,Spring,Spring Boot,我正在为一个使用spring作为后端的学校项目创建一个网站。当新数据保存到特定表时,我尝试将数据插入数据库 我试过使用@handleeftercreate和@PrePersist,但都不起作用。我对春天不是很有经验。老师叫我们用它,现在我不知道该怎么办 @HandleAfterCreate public void handlePersonBeforeCreate(个人){ logger.info(“创建前的内部人员…”); Set qualifikationen=new HashSet(); k

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

我试过使用@handleeftercreate和@PrePersist,但都不起作用。我对春天不是很有经验。老师叫我们用它,现在我不知道该怎么办

@HandleAfterCreate
public void handlePersonBeforeCreate(个人){
logger.info(“创建前的内部人员…”);
Set qualifikationen=new HashSet();
kompetenzRepository.findAll().forEach(kompetenz->{
Qualifikation Qualifikation=新的Qualifikation();
质量稳定质量(0);
资格认证。设置许可证(许可证);
资格设置人(人);
});
person.setQualifikationen(qualifikationen);
System.out.println(person.getDisplayName());
}

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

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


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

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


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

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

另外,如果回调方法仅在持久化时调用(
@PrePersist
),我认为应该将其设置为私有的


见详情。在本文中还介绍了实体侦听器,当处理需要相同预持久化功能的多个实体时,这可能也是一个很好的解决方案。

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

另外,如果回调方法仅在持久化时调用(
@PrePersist
),我认为应该将其设置为私有的


见详情。在本文中还介绍了实体侦听器,在处理需要相同预持久化功能的多个实体时,这可能是一个很好的解决方案。

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

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

你能看到那排木头吗?@pirho问题是它根本就没出现。我把它放在一个带有
@RepositoryEventHandler
的类中,这个类在
@Configuration
类中调用。你能看到那个日志行吗?@pirho问题是它甚至没有出现。我把它放在一个带有
@RepositoryEventHandler
的类中,这个类在
@Configuration
类中调用,我用
@Service
注释了这个类,它记录了
Hibernate:insert-into-person(id,version,display_-name,projekt_-id,role,username)值(null。我必须注册服务还是什么?创建之前的
HandlePerson
是否在
人员
实体内?如果是这样,请创建一个新类,将其命名为
PersonService
,并用
@Service
注释该类。您是否也可以发布您的实体,以便我们可以看到哪一方是关系的拥有方?它位于用
@Service
注释的类中。这里是Person实体:这里是服务:啊,据我所知,
Qualifikation
是关系
Person
Qualifikation
的拥有方。这意味着您必须通过
Qualifikation存储库
保护
Qualifikation
。另外,
@handlebeforerecreate
对未使用
@RepositoryEventHandler
()注释的类不起作用。如果要插入
人员
,则应在创建之前手动调用
handlepersonbefore
。我添加了代码以将
Qualifikation
保存到存储库中,并将其添加到人员中。我以前用
@RepositoryEventHandler
尝试过该教程,但该方法没有成功