我有一个实体模型,出于简化的目的,让我们说它看起来像这样:
public class Results {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private Long firstUser;
private Long secondUser;
private Double average;
private Double median;
private Double score;
}
这是我的ResultsService实施:
public class ResultsServiceImpl implements ResultsService{
@Autowired
private CalculateDataRepository calculateDataRepository;;
@Autowired
private ResultsService resultsService;
Results results=new Results();
public void Average(Long id1, Long id2){
UserData firstClient = calculateDataRepository.findOne(id1);
userData secondClient = calculateDataRepository.findOne(id2);
clientId = firstClient.getClient().getId();
secondId = secondClient.getClient().getId();
Double average=(firstClient.getA()+secondClient.getA())/2;
results.setAverage(average);
}
public void Score(Long id1, Long id2){
SurveyData firstClient = surveyDataRepository.findOne(id1);
SurveyData secondClient = surveyDataRepository.findOne(id2);
clientId = firstClient.getClient().getId();
secondId = secondClient.getClient().getId();
Double average=(firstClient.getB()+secondClient.getB());
results.setScore(average);
results.setFirstUser(clientId );
results.setSecondUser(secondId );
resultsService.save(results);
}
....
我尝试声明结果结果=新结果();在每个方法中,但是当我保存它们时,它们会被保存在不同的行中,而不是相同的行。 如何保持引用,以便当我在一个函数中调用字段的setter时,它与另一个函数中字段的setter在同一行中。 为了解决问题,我试图避免显示calculateDataRepository的实现,这只是一个实体的存储库,其中为不同的用户保存了一些结果。
结果方法没有外来字段引用,也没有来自其他地方的引用,因为我从其中一个方法设置了字段firstUser和secondUser;
谢谢。
编辑:
Results results=resultsService.findByFirstUserAndSecondUser(clientId, secondId);
if(results==null) {
results= new Results();
// Store to db ?
}
results.setAverage();
resultsService.save(results);
答案 0 :(得分:0)
实际上你需要一个ResultsRepository
中的方法Results findByFirstAndSecond(Long first, Long second);
在每个Average和Score方法中(BTW Java命名约定要求方法名称从小写字母开始)调用findByFirstAndSecond(id1,id2)
如果方法返回null(没有这样的结果),则创建一个新实例并保存在DB(INSERT)中。如果返回某些结果,则将信息存储在那里,并将更改保存在DB(更新)中。