@ElementCollection Vs @OneToMany #323
-
Buenas, estaba practicando el parcial QueMePongo y me había surgido dudas sobre Entiendo que Mi dudas serían
@Entity
@Table(name="prendas")
class Prenda{
@Id @GeneratedValue
Long id;
// - Como sólo nos interesa el valor, es una colección de "value objects"
// - Define una relación @OneToMany donde una prenda puede tener muchos colores
// pero Color es un Embeddable
@ElementCollection
List<Color> colores = new ArrayList<Color>();
@Enumerated(EnumType.STRING)
Categoria categoria;
String descripcion;
}
// - avisamos que esta clase se va a embeber dentro de otra clase
// - todos los atributos estarán en otra, no se creará una tabla
// aunque como en Prenda usamos @ElementCollection se creará la tabla
// como un @OneToMany
@Embeddable
class Color{
@Column(name="color_nombre");
String color;
@Column(name="color_codigo");
String codigoHexa;
}
// En la definición de los Enum no requieren annotations
Enum CategoriaPrenda{
ARRIBA, ABAJO, ENTEROS, CALZADOS, ACCESORIOS;
boolean cubreTemperatura(temperatura){
// ...
}
} Gracias, |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 1 reply
-
También tenía una última duda, la agrego como otra respuesta para que no quede muy extenso. Tenía dudas en el DER respecto a si debería existir la relación(Evento, Sugerencia) de 1 a N, @Entity
@Table(name="sugerencias")
class Sugerencia{
@OneToMany
List<Prenda> prendas = new ArrayList<Prenda>();
@ManyToOne
Evento evento;
} Caso contrario me quedaría de la siguiente forma |
Beta Was this translation helpful? Give feedback.
-
si, pero además esto te va a afectar en los updates que tiene que borrar todos los elementos y luego insertarlos, porque no mantiene una identidad ese value object (por lo que recuerdo).
No es que no las quierar persistir (muy importante), sino que no te importa/no queres manejar su identidad. Entonces por ejemplo si tenes una relacion toOne podrías unirla a la tabla original, un beneficio a nivel joins
Ojo que la relacion entre evento y sugerencia recien aparece en la 2da parte, originalmente, no hay ninguna relación entre ellos. Por eso en el diagrama de clases original dice que es un mensaje. En base al planteamiento de la 2da parte tenes que analizar que te conviene. |
Beta Was this translation helpful? Give feedback.
si, pero además esto te va a afectar en los updates que tiene que borrar todos los elementos y luego insertarlos, porque no mantiene una identidad ese value object (por lo que recuerdo).
No es que no las quierar persistir (muy importante), sino que no te importa/no queres manejar su identidad. Entonces por ejemplo si tenes una relacion toOne podrías unirla a la tabla original, un beneficio a nivel joins