Bueno, de hecho se puede.
Puede usar anotaciones como @PreUpdate, @PrePersists, @PostUpdate y así convertir manualmente los elementos de una colección. De esta forma su entidad puede renderizarlos a su gusto, mientras que en la base de datos solo almacena un texto sin formato.
Una alternativa más pausible será usar la anotación @Convert, disponible desde jpa 2.1 (@UserType in hibernate). Le dice a jpa que convierta el campo en otro tipo cada vez que lea/guarde en la base de datos. Para ello, debe usar la anotación @Convert, especificar y el objeto AttributeConverter.
Por ejemplo
public class Parent {
@Id
private Integer id;
@Convert(converter = FriendConverter.class)
private Set<Parent>friends;
}
y Clase convertidor como el siguiente:
@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;
}
}
Es una aplicación ficticia pero te da la idea.
Como comentario personal, recomiendo mapear la relación como debería. En el futuro te evitará problemas. AttributeConverter es útil cuando se trabaja con enums
Una relación muchos a muchos autorreferencial es válida y puede correlacionarse utilizando anotaciones JPA. Como todas las relaciones de muchos a muchos, debe definir una tabla puente para almacenar ambos lados de la relación. La entidad definirá un campo para el lado propietario y otro campo para el lado asignado de la relación. – scottb