-
Conversion de type
Bonjour tout le monde,:(
J'espère que vous allez m'apporter votre aide ou votre retour d'expérience .
Mon problème est le suivant après la modélisation de mon "Domain Model" avec le diagramme de classe, j’écris le code SQL manuellement suivant le dialect de PostgreSQL, après je généré mes entités avec GlassFish ESB en utilisant TopLink comme fournisseur de persistance, jusqu'il n'y aucun problème .
lorsque je veux utilisé une autre base de données par exemple Oracle 11g ou Sql Server 2008 c'est la ou commence mon problème car chaque base de donnée à son propre dialecte ce qui fait qu'il y a des types de données qui n'existe pas dans d'autre base de données ce qui m'oblige à faire des convertion de type au niveau de mes getter/setter pour certain type, je suis sur qu'il une manière plus élégante pour ce genre de problème, mais je suis débutant.
J'attends votre aide le plus vite possible.
Merci.
-
coucou,
J'ai besoin de votre aide :P
-
Tu peux utiliser des outils avec lesquel tu vas construire tes modèles de base de données, et en suite générer tout le code correspondant à la base de donnée que tu utilises (Oracle, ...)
-
Merci de votre réponse,
J'ai effectivement penser à cela, mais j'aurai des DAO différents, or je veux avoir un seul DAO pour toutes les bases de données.
Est ce possible, merci.
-
Tes pojos de tes objets en base seront les même de toute façon.
Et pour ta DAO, et bien c'est à voir avec ce que tu prends comme moteur de persistance.
-
Vu que tu utilises EclipseLink (anciennement toplink), tu as la possibilité de faire du JPA et donc des trucs standards et portables. Est ce que tu utilises vraiment des spécificités de ta base ?
-
J'utilise JPA avec le provider de persistance TopLink, le problème c'est que les bases de données en des dialects différents, voila donc un exemple que je rencontre avec Oracle:
Le probléme et le suivant , j'ai une base de donnée Oarcle qui ne supporte pas le type boolean, or PostgresSql support le type boolean donc je le represente avec Number(1,0), lorsque je génère mes Entity Bean JPA avec TopLink , il me génère un type Char .
La seul solution que j'ai trouvé pour le moment et de modifier mes getter/setter pour faire la conversion vers le type boolean,
mais la ça demande une intervention humain c'est pas pratique du tous vue le nombre de table que j'ai.
Merci de votre aide.
-
je connais pas des masses toplink, mais normalement c'est au dialect de savoir qu'il doit mapper un boolean (type du bean) sur un champde type varchar(1) contenant 'Y' ou 'N'. Ton code a pas à s'en souciser. Je te recommande de travailler dans l'autre sens. Tu crée tes beans (avec les types java dont tu as besoin) et après tu demande à toplink ou autre de générer le schéma de base de données qui correspond. Au moins, c'est le code qui est commun.
-
J'aurais tendance à procéder de la même manière. Normalement il devrait se débrouiller pour l'implémenter dans toutes les bases.