Beh, in effetti è possibile.
È possibile utilizzare annotazioni come @PreUpdate, @PrePersists, @PostUpdate e così convertire manualmente gli elementi di una raccolta. In questo modo la tua entità può eseguire il rendering nel modo desiderato, mentre nel database si memorizza solo un testo non elaborato.
Un'alternativa più plausibile sarà l'uso dell'annotazione @Convert, disponibile da jpa 2.1 (@UserType in hibernate). Indica a jpa di convertire il campo in un altro tipo ogni volta che legge/salva nel database. Per questo dovresti usare @Convert anotation, specificando e AttributeConverter oggetto.
Per esempio
public class Parent {
@Id
private Integer id;
@Convert(converter = FriendConverter.class)
private Set<Parent>friends;
}
E classe convertitore simile al seguente:
@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;
}
}
Si tratta di un'implementazione fittizia ma ti dà l'idea.
Come commento personale, consiglio di mappare la relazione come dovrebbe. In futuro ti eviterà problemi. AttributeConverter è utile quando si lavora con le enumerazioni
Una relazione molti-a-molti autoreferenziale è valida e può essere mappata utilizzando le annotazioni JPA. Come tutte le relazioni molti-a-molti, è necessario definire una tabella bridge per memorizzare entrambi i lati della relazione. L'entità definirà un campo per il lato proprietario e un altro campo per il lato mappato della relazione. – scottb