J'essaie de mapper un modèle Java normalisé à un schéma de base de données existante en utilisant Hibernate 3.5. Une table particulière code une clé étrangère dans une relation un-à-plusieurs en tant que colonne de tableau de bits.Hibernate tableau de bits à la cartographie de l'entité
Tenir compte des tables person
et club
qui décrit les affiliations des gens aux clubs:
person: .----.------. club: .----.---------.---------------------------.
| id | name | | id | name | members | binary(members) |
|----+------| |----+---------|---------+-----------------|
| 1 | Bob | | 10 | Cricket | 0 | 000 |
| 2 | Joe | | 11 | Tennis | 5 | 101 |
| 3 | Sue | | 12 | Cooking | 7 | 111 |
'----'------' | 13 | Golf | 3 | 100 |
'----'---------'---------'-----------------'
donc nous espérons qu'il est clair que person.id
est utilisé comme indice de bit dans le tableau de bits club.members
:
.---.---.---.
| S | J | B |
| u | o | o |
| e | e | b |
|---+---+---|
| 1 | 0 | 1 |
'---'---'---'
En cet exemple, la colonne members
nous dit que:
- n'est membre de Cricket --- pas de drapeaux mis
- Bob/Sue -> Tennis --- drapeaux aux positions 1 et 3 sont mis
- Bob/Sue/Joe -> Cuisine --- drapeaux aux positions 1, 2 et 3 sont mis en
- Sue -> Golf --- drapeau à la position 3 est réglé
maintenant, pour cet exemple une table de jointure aurait pu être utilisé à la place qui simplifierait les choses et éviter de nombreux problèmes potentiels - par exemple: la plage maximale de members
en plaçant une limite supérieure sur le nombre de people
lignes. Cependant, je suis coincé avec ce schéma et il semble qu'il y avait des facteurs en faveur de l'utilisation d'une colonne de tableau peu à l'époque.
Dans mon domaine Java Je voudrais modéliser ce schéma avec des entités comme ceci:
class Person {
private int id;
private String name;
...
}
class Club {
private Set<Person> members;
private int id;
private String name;
...
}
Je suppose que je dois utiliser une mise en œuvre UserType
mais ont été incapables de trouver des exemples où les éléments décrits par le type d'utilisateur sont des références à des entités - et non à des valeurs de champ littérales - ou à des composites de celles-ci. De plus, je suis conscient que je vais devoir considérer comment les entités person
sont récupérées lorsqu'une instance club
est chargée.
Quelqu'un peut-il me dire comment je peux apprivoiser ce schéma hérité avec Hibernate?
Mise à jour
J'ai récemment dû revoir ce type de cartographie dans une base de données existante. Cette fois-ci, il est devenu évident que notre équivalent de la table members
était en fait un ensemble statique et pouvait être codé en dur en tant que Enum
. Avec cette simplification, il était assez simple d'implémenter un Hibernate UserType
converti entre le tableau de bits et un ensemble d'énumérations.
Avez-vous été en mesure de comprendre cela? – rj2700