java - example - @embeddedid
¿Por qué usamos @Embeddable In Hibernate? (2)
Hay dos tipos de objetos en Hibernate
1. Objeto de valor
2. Entidades
Los objetos de valor son los objetos que no pueden estar solos. Tome la Address
, por ejemplo. Si dices la dirección, la gente preguntará de quién es esta dirección. Entonces no puede estar solo.
Los Objetos de Entidad son aquellos que pueden mantenerse solos como College
y Student
.
Entonces, en el caso de objetos de valor, la forma preferida es Incrustarlos en un objeto de entidad.
Para responder por qué estamos creando dos clases diferentes: en primer lugar, es un concepto OOPS que debe tener acoplamiento flexible y alta cohesión entre las clases. Eso significa que debe crear clases solo para fines especializados. Por ejemplo, su clase de Student
solo debe tener la información relacionada con el Student
.
El segundo punto es que al crear diferentes clases promueves la reutilización.
Cuando definimos el objeto de valor para la clase de entidad usamos @Embeddable
.
Cuando usamos el tipo de objeto de valor en la clase de entidad usamos @Embedded
¿De qué sirve @Embedded
y @Embeddable
en Hibernate? Porque cada ejemplo que encuentro en internet es insertar datos dentro de una sola tabla y hacer eso usando dos clases diferentes. Mi punto es que si estoy usando una sola tabla, entonces puedo mapear todas las columnas dentro de una sola clase, entonces ¿por qué debería usar una clase diferente? y si utilizamos dos tablas diferentes, entonces hay one-to-one
relación de hibernación de one-to-one
y de one-to-many
.
Una entidad puede integrarse en otra entidad. Los atributos de una entidad pueden ser atributos comunes de más de una entidad. En este caso, puede haber una entidad incrustable. Y esta entidad incrustable se puede incrustar en más de una entidad.
Consideremos un ejemplo. Tenemos una entidad Animal
, que tiene atributos de name
y location
. Ahora, dos entidades diferentes, Lion
y Elephant
pueden tener atributos de Animal
simplemente incorporando la entidad Animal
. Podemos anular los atributos. En Animal
entidad Animal
hay un atributo de location
y en Elephant
hay un atributo de place
. Entonces, con la ayuda de @AttributeOverrides
, podemos hacer lo siguiente:
@AttributeOverrides({ @AttributeOverride(name = "location", column = @Column(name = "place")) })