Java 在更新引用实体后,是否有方法更新其他实体中的列?

Java 在更新引用实体后,是否有方法更新其他实体中的列?,java,spring,spring-boot,jpa,single-responsibility-principle,Java,Spring,Spring Boot,Jpa,Single Responsibility Principle,这是我的项目中其他实体用作参考的项目实体: @Entity @Data @RequiredArgsConstructor @AllArgsConstructor public class Project { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long id; @NonNull private String projectName; @NonNull priv

这是我的项目中其他实体用作参考的项目实体:

@Entity
@Data
@RequiredArgsConstructor
@AllArgsConstructor
public class Project {

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;

    @NonNull private String projectName;
    @NonNull private String projectCode;
    @NonNull private String description;

    @NonNull private Integer resourceSize;

    //other fields

}
另外两个实体
花名册
外包请求表
,在创建时从项目实体复制字段
项目名称
资源大小


@Entity
@Data
@RequiredArgsConstructor
@AllArgsConstructor
public class Roster {

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;

    @Version
    private Long version;

    @NonNull private String projectName;
    @NonNull private Integer resourceSize;

    //other fields

}
对字段
resourceSize
的更改也需要反映在上述两个实体中。 下面是服务类更新/插入项目实体的逻辑

@Service
public class ProjectServiceImpl implements ProjectService {

    @Autowired ProjectRepository projectRepo;

    @Autowired ProjectWebClientService projectWebClientService; 

    @Autowired RosterService rosterService;
    @Autowired OutsourceRequestFormService orfService;

    /**
     * 
     */
    public void updateProjectData() {
        //delete existing records
        projectRepo.deleteAll();
        //fetch data from other server
        List<Project> projectList = projectWebClientService.getProjectData(); 
        //save project data
        projectRepo.save(projectList);

        // ---->   need solution for below part   <----
        projectList.forEach(project-> {
            //find rosters by projectName and update resourceSize
            rosterService.updateRoster(project.getProjectName() ,   project.getResourceSize());
            //find orf by projectName and update resourceSize
            orfService.updateOrf(project.getProjectName() ,   project.getResourceSize());
        });
    }

}
@服务
公共类ProjectServiceImpl实现ProjectService{
@自动连线项目库projectRepo;
@自动连线ProjectWebClient服务ProjectWebClient服务;
@自动连线罗斯特服务罗斯特服务;
@自动连线外包服务或服务;
/**
* 
*/
public void updateProjectData(){
//删除现有记录
projectRepo.deleteAll();
//从其他服务器获取数据
List projectList=projectWebClientService.getProjectData();
//保存项目数据
projectRepo.save(projectList);
//----->以下部分需要解决方案{
//按项目名称查找名册并更新resourceSize
updateRoster(project.getProjectName(),project.getResourceSize());
//按项目名称查找orf并更新resourceSize
orfService.updateOrf(project.getProjectName(),project.getResourceSize());
});
}
}

我有没有办法从这个类中删除这个部分
projectList.forEach{}
,并在其他地方以更好的方式执行它,因为它违反了单一责任原则。你也可以省略这个循环。但在每次更新项目时都会遇到一个问题,它会起作用(若这是需求,那个么就没问题)

请试试这个:-

@Entity
@Data
@RequiredArgsConstructor
@AllArgsConstructor
**@EntityListeners({RosterListener.class ,OrfListener.class})**
public class Project {

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;

    @NonNull private String projectName;
    @NonNull private String projectCode;
    @NonNull private String description;

    @NonNull private Integer resourceSize;

    //other fields

}
听众:-

import javax.persistence.PostUpdate;
    public class RosterListener{

        @PostUpdate
         void onProjectUpdate(Project roject) {
            RosterService  rosterService = (RosterService ) BeanUtility.getBean("RosterService "); // find this as from your application context environment
            osterService.updateRoster(project.getProjectName(), project.getResourceSize());
         }

    }

import javax.persistence.PostUpdate;
    public class OrfListener{

        @PostUpdate
         void onProjectUpdate(Project roject) {
            OutsourceRequestFormService   outsourceRequestFormService  = (OutsourceRequestFormService  ) BeanUtility.getBean("outsourceRequestFormService  "); // find this as from your application context environment
            outsourceRequestFormService.updateOrf(project.getProjectName(), project.getResourceSize());
         }

    }

@自动连线,不能工作,所以需要手动获取bean对象来更新花名册和Orfthanks以获得答案。您是否可以为PostUpdate注释添加导入,我将对此进行检查
import javax.persistence.PostUpdate;
    public class RosterListener{

        @PostUpdate
         void onProjectUpdate(Project roject) {
            RosterService  rosterService = (RosterService ) BeanUtility.getBean("RosterService "); // find this as from your application context environment
            osterService.updateRoster(project.getProjectName(), project.getResourceSize());
         }

    }

import javax.persistence.PostUpdate;
    public class OrfListener{

        @PostUpdate
         void onProjectUpdate(Project roject) {
            OutsourceRequestFormService   outsourceRequestFormService  = (OutsourceRequestFormService  ) BeanUtility.getBean("outsourceRequestFormService  "); // find this as from your application context environment
            outsourceRequestFormService.updateOrf(project.getProjectName(), project.getResourceSize());
         }

    }