从Controller向数据库添加数据,不同的方法但是同一行

时间:2017-10-31 23:18:21

标签: spring spring-boot

我有一个实体模型,出于简化的目的,让我们说它看起来像这样:

 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);

1 个答案:

答案 0 :(得分:0)

实际上你需要一个ResultsRepository

中的方法
Results findByFirstAndSecond(Long first, Long second);

在每个Average和Score方法中(BTW Java命名约定要求方法名称从小写字母开始)调用findByFirstAndSecond(id1,id2)

如果方法返回null(没有这样的结果),则创建一个新实例并保存在DB(INSERT)中。如果返回某些结果,则将信息存储在那里,并将更改保存在DB(更新)中。