Java 单向与双向
我有一个基本的日记项目和一对多的关系与两个实体,用户和日记条目。问题是我有两种添加数据的方法,一种是双向的,另一种是单向的。双向方法的问题在于,我无法从最近添加到数据库的日记对象中获取id以发送给用户,但我不确定这到底有多重要。另一种方法是使用单向方法,它允许我直接添加日记对象并将其返回给用户,但大多数在线建议是使用双向方法。感谢您的建议,因为我只是想熟悉SpringREST应用程序的最佳方法Java 单向与双向,java,spring,spring-boot,jpa,spring-data-jpa,Java,Spring,Spring Boot,Jpa,Spring Data Jpa,我有一个基本的日记项目和一对多的关系与两个实体,用户和日记条目。问题是我有两种添加数据的方法,一种是双向的,另一种是单向的。双向方法的问题在于,我无法从最近添加到数据库的日记对象中获取id以发送给用户,但我不确定这到底有多重要。另一种方法是使用单向方法,它允许我直接添加日记对象并将其返回给用户,但大多数在线建议是使用双向方法。感谢您的建议,因为我只是想熟悉SpringREST应用程序的最佳方法 public void createDiaryEntryNoResult(Long uId, Diar
public void createDiaryEntryNoResult(Long uId, DiaryEntryDTO diaryEntryDTO) {
userRepository.findById(uId)
.map(user -> {
DiaryEntry diaryEntry =
diaryEntryMapper.diaryEntryDTOToDiaryEntry(diaryEntryDTO);
user.addDiaryEntry(diaryEntry);
userRepository.save(user);
return user;
})
.orElseThrow(ResourceNotFoundException::new);
}
“双向方法的问题在于,我无法从最近添加到数据库的日记对象中获取id以发送给用户,但我不确定这到底有多重要。”
调用save方法后,id应出现在savedDiaryEntry中
没有“正确”的方法-这取决于使用API的人员
他们当时是否需要回复中的id,还是仅供参考?如果出于某种原因,您需要该id来调用其他API方法,那么正确的方法当然是在响应中返回该id,否则不返回任何内容也可以
如果他们现在不需要id,那么只返回“200 OK”或“201 No content”响应而不返回正文是正确的方法,这完全取决于调用API的人当时需要什么,或者对他们来说什么更方便……我应该说我无法获得对最近添加的对象的引用。我可以从save()中获取它添加到的用户,但实际的日记条目进入用户实体内的集合或列表中,我不确定如何在保存时访问它。但要回答另一个问题,客户也是我,我不需要对象/id,因为它只是为了符合标准和API的其他保存功能,返回保存的内容。ao您是说在这一行:DiaryEntry saveddialEntry=diaryEntryRepository.save(DiaryEntry),savedDiaryEntry没有填充id字段?在该方法中没有,但是通过使用userRepository保存日记条目的第一种方法只返回包含日记条目对象列表的用户实体,但是从这个方法中,除了将列表迭代到最后一项之外,我无法确定最近添加了什么,但是我觉得在生产中,这并不能保证它是最新的已将日记etnry添加到用户。用户实体具有与之关联的日记条目对象的双向数据集。这就是为什么issuse是最重要的方法,用一个查询保存它,这可能是最理想的,但另一个返回没有绝对正确的方法来实现这一点,我认为您的代码没有任何问题。这还取决于你如何使用两种方法,如果我需要提供整个
用户
响应,我将使用第一种方法,如果我必须只返回添加的日记条目,我将使用第二种方法。同样随机的东西,但“双向”和“单向”不是描述这种困境的正确术语,问题是您是否返回响应,还是返回请求中的空正文。人们可能会将这与将实体关系定义为双向和单向的概念相混淆,这是完全不同的事情。因此,您可能想更改问题的标题…我将尝试重新编写一点,但这是正确的术语,因为第二种方法基于实体关系被更改为单向打开并更改数据保存方式。这是一个分为两部分的问题。
public DiaryEntryDTO createDiaryEntryWithResult(Long uId, DiaryEntryDTO diaryEntryDTO) {
DiaryEntry diaryEntry = diaryEntryMapper.diaryEntryDTOToDiaryEntry(diaryEntryDTO);
User user = userRepository.findById(uId).orElseThrow(ResourceNotFoundException::new);
diaryEntry.setUser(user);
DiaryEntry savedDiaryEntry = diaryEntryRepository.save(diaryEntry);
return diaryEntryMapper.diaryEntryToDiaryEntryDTO(savedDiaryEntry);
}