У меня есть сущность Tag
, как это
@Entity
@Table(name = "tags")
public class Tag {
@Id
String name;
@ElementCollection(fetch = FetchType.EAGER)
@Column(name = "values")
Collection<String> values;
public Collection<String> getValues() {
return values;
}
public void setValues(Collection<String> values) {
this.values = values;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Я спроектировал эту сущность так, чтобы иметь такой json
{
"name": "rbb",
"values": [
"Rank Banker",
"Tank Ranker"
]
}
У меня есть такой контроллер
@RequestMapping("/tags")
@RestController
public class TagController {
@Autowired
TagsRepository tagsRepository;
@PostMapping("/set")
private ResponseEntity<CustomResponse> setTags(@RequestParam(value = "tag") String tag, @RequestParam(value = "values") Set<String> values){
Tag tag1 = new Tag();
tag1.setName(tag);
tag1.setValues(values);
tagsRepository.save(tag1);
CustomResponse customResponse = new CustomResponse();
customResponse.setStatus("Success");
customResponse.setMessage("Successfully saved tag");
return new ResponseEntity<>(customResponse, HttpStatus.OK);
}
}
При этом каждый раз, когда я нажимаю на этот API, мои данные будут заменяться.
Я хочу добавить новые значения к последнему json, и, следовательно, я делаю это так
@RequestMapping("/tags")
@RestController
public class TagController {
@Autowired
TagsRepository tagsRepository;
@PostMapping("/set")
private ResponseEntity<CustomResponse> setTags(@RequestParam(value = "tag") String tag, @RequestParam(value = "values") Set<String> values){
Optional<Tag> tg = tagsRepository.findById(tag);
Tag tag1;
if(!tg.isPresent()){
tag1 = new Tag();
tag1.setName(tag);
tag1.setValues(values);
}else {
tag1 = tg.get();
tag1.getValues().addAll(values);
}
tagsRepository.save(tag1);
CustomResponse customResponse = new CustomResponse();
customResponse.setStatus("Success");
customResponse.setMessage("Successfully saved tag");
return new ResponseEntity<>(customResponse, HttpStatus.OK);
}
}
Сначала я нахожу, если значение уже присутствует, и, если оно присутствует, я добавляю его в массив. Но я не думаю, что это правильный путь, так как поиск значения становится более утомительным, когда массив большой. Так есть ли другой эффективный способ достичь этого. Любая помощь будет оценена.