java在更新引用实体之后,有没有办法更新其他实体中的列?
这是我的项目中其他实体用作参考的项目实体:
@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
}
另外两个实体Roster
和OutsourceRequestForm
,它们在创建时从项目实体复制字段projectName
和resourceSize
@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
}
@Entity
@RequiredArgsConstructor
@Data
public class OutsourceRequestForm {
@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());
});
}
}
是否有任何方法可以从这个类中删除这个部分projectList.forEach {}
,并在其他位置以更好的方式执行它,因为它违反了single responsibility principle
# 1 楼答案
它还将维持单一责任原则。你也可以省略这个循环。但每次更新项目时都会遇到一个问题,它会起作用(如果这是要求,那么就可以了)
请试试这个:-
听众:-