Ho due entità - film e attore - che hanno relazione M: N. Quando progetti oggetti DTO per queste entità non sono sicuro di quale sia la strada giusta da percorrere.Trasferimento dati Oggetti di entità con relazioni M: N o 1: N
film
@Entity
@Table(name = "Movies")
public class Movie extends AbstractBusinessObject {
private String name;
private String short_info;
@ManyToMany
private Map<String, Actor> cast;
}
Attore
@Entity
@Table(name = "Actors")
public class Actor extends Person{
private String name;
@ManyToMany(mappedBy = "cast")
private Set<Movie> movies;
}
Ora, riguardo alle DTOs: ho incontrato due modi diversi come affrontare con 1: N e M: N rapporti .
salvando solo gli ID:
public class MovieDto {
private String name;
private String short_info;
// Long represents Actor's ID
private Map<String, Long> cast;
}
Tuttavia come detto here ho pensato che Instead of performing many remote calls on EJBs, the idea was to encapsulate data in a value object
, e questo approccio rompe chiaramente la regola.
Salvataggio DTOs in DTOs: Un altro approccio sarebbe quello di Dto negozio di attore, invece del suo ID.
public class MovieDto {
private String name;
private String short_info;
private Map<String, ActorDto> cast;
}
Mi sembra che questo approccio sarebbe più veloce, come io non devo chiamare la base di dati ogni volta che ho bisogno di mostrare il nome dell'attore, per esempio.
Questa supposizione è corretta o sarebbe meglio memorizzare solo ID (anche considerando il consumo di spazio del secondo approccio)?
Inoltre, il secondo approccio comporterebbe un numero di DTO per una entità. Per esempio, non ho bisogno di sapere in che film ha recitato l'attore quando ho visto una "pagina del film", ma ho bisogno di farlo quando guardo una "pagina degli attori".
Hai davvero bisogno di dtos? Spesso sono solo codice duplicato. È possibile restituire un'entità, che ha solo il campo id impostato –