Ну, на самом деле вы можете.
Вы можете использовать аннотации, такие как @PreUpdate, @PrePersists, @PostUpdate и т. Д., Чтобы вручную преобразовать элементы коллекции.Таким образом, ваша сущность может отображать то, что вы хотите, в то время как в базе данных вы храните только необработанный текст.
Более приемлемой альтернативой будет использование аннотации @Convert, доступной начиная с jpa 2.1 (@UserType в hibernate).Он сообщает jpa преобразовывать поле в другой тип при каждом чтении / сохранении в базе данных.Для этого вам следует использовать аннотацию @Convert, указав и объект AttributeConverter.
Например
public class Parent {
@Id
private Integer id;
@Convert(converter = FriendConverter.class)
private Set<Parent>friends;
}
И класс конвертера, подобный следующему:
@Component
public class FriendConverter implements AttributeConverter<List, String>{
@Autowired
private SomeRepository someRepository;
@Override
public String convertToDatabaseColumn(List attribute) {
StringBuilder sb = new StringBuilder();
for (Object object : attribute) {
Parent parent = (parent) object;
sb.append(parent.getId()).append(".");
}
return sb.toString();
}
@Override
public List convertToEntityAttribute(String dbData) {
String[] split = dbData.split(".");
List<Parent>friends = new ArrayList<>();
for (String string : split) {
Parent parent = someRepository.findById(Integer.valueOf(string));
friends.add(accion);
}
return friends;
}
}
Этоглупая реализация, но она дает вам представление.
В качестве личного комментария я рекомендую отобразить отношения так, как следует.В будущем это избавит вас от проблем.AttributeConverter пригодится при работе с перечислениями