Je suis actuellement (de retour) au courant avec EJB et pendant mon absence, cela a radicalement changé (jusqu'à présent pour le mieux). Cependant, je suis tombé sur un concept avec lequel je me bats et que j'aimerais mieux comprendre car il semble être utilisé dans notre code (où je travaille, pas moi et toutes les voix dans ma tête) un peu.
Voici l'exemple que j'ai trouvé dans un livre. Cela fait partie d'un exemple montrant comment utiliser le @EmbeddedId
annotation:
@Entity
public class Employee implements Java.io.Serializable
{
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name="lastName", column=@Column(name="LAST_NAME"),
@AttributeOverride(name="ssn", column=@Column(name="SSN"))
})
private EmbeddedEmployeePK pk;
...
}
La classe EmbeddedEmployeePK
est une méthode assez simple @Embeddable
classe qui définit une paire de @Columns
: lastName
et ssn
.
Oh, et j'ai retiré cet exemple de O'Reilly's Enterprise JavaBeans 3.1 de Rubinger & Burke.
Merci d'avance pour toute aide que vous pouvez me donner.
Cela signifie que les attributs qui composent l'ID incorporé peuvent avoir des noms de colonne prédéfinis (via des mappages explicites ou implicites). En utilisant le @AttributeOverride
vous dites "ignorez les autres informations dont vous disposez concernant la colonne dans laquelle elles sont stockées et utilisez celle que je spécifie ici".
Dans la classe UserDetails, j'ai remplacé homeAddress
& officeAddress
par Address
Ce POJO One Address agira pour deux tables dans DB.
DB:
Table1 Table2
STREET_NAME HOME_STREET_NAME
CITY_NAME HOME_CITY_NAME
STATE_NAME HOME_STATE_NAME
PIN_CODE HOME_PIN_CODE
La classe EmbeddedEmployeePK est une classe @Embeddable assez simple qui définit une paire de @Columns: lastName et ssn.
Pas tout à fait - EmbeddedEmployeePK
définit une paire de propriétés, qui sont ensuite mappés sur des colonnes. Le @AttributeOverride
les annotations vous permettent de remplacer les colonnes auxquelles les propriétés de la classe incorporée sont mappées.
Le cas d'utilisation pour cela est lorsque la classe intégrable est utilisée dans différentes situations où ses noms de colonnes diffèrent, et un mécanisme est requis pour vous permettre de modifier ces mappages de colonnes. Par exemple, supposons que vous ayez une entité qui contient deux instances distinctes du même élément incorporable - elles ne peuvent pas toutes les deux correspondre aux mêmes noms de colonne.
Vous pouvez également remplacer d'autres propriétés de colonne (pas seulement les noms).
Supposons que vous souhaitiez modifier la longueur du SSN en fonction de la personne qui incorpore votre composant. Vous pouvez définir un @AttributeOverride
pour la colonne comme celle-ci:
@AttributeOverrides({
@AttributeOverride(name = "ssn", column = @Column(name = "SSN", length = 11))
})
private EmbeddedEmployeePK pk;
Voir "2.2.2.4. Objets incorporés (aka composants)" dans la documentation Hibernate Annotations.
Afin de préserver les autres @Column
propriétés (telles que name
et nullable
) les conservent dans la colonne remplacée de la même manière que vous l'avez spécifié dans la colonne d'origine.
JPA essaie de mapper les noms de champ aux noms de colonne dans une source de données, donc ce que vous voyez ici est la traduction entre le nom d'une variable de champ et le nom d'une colonne dans une base de données.