Cela peut-il avoir un sentiment de sens?
Disons que j'ai besoin d'atteindre un objet de la DB qui a une relation avec un autre objet (représenté par une clé étrangère dans la DB et par une composition de mon objet de domaine). Si dans mon premier Dao, je récupère les données de l'objet 1, appelez le DAO pour l'objet 2, et enfin (à partir de la première DAO, appelez le Setter dans l'objet 1 et donnez-lui l'objet 2). P>
Je sais que je pouvais faire une jointure à la place, mais cela me semble plus logique pour découpler la fonctionnalité (c'est pourquoi je suis sceptique à propos de l'appeler un DAO d'un autre). Ou devrais-je déplacer une partie de la logique à la couche de service? P>
merci p>
Je n'avais rien à changer d'autre. Merci pour l'aide! P> p>
3 Réponses :
En lisant cela, je ne peux que conclure que probablement, vous le faites mal ..) p>
Si vous configurez vos mappages directement entre ObjectA et ObjectB (pourrait être ONETOne, OneTomanany ou MétéoTomany), Hibernate (paresseux) chargera la référence de A à B automatiquement. Cela éliminera la nécessité d'interroger le deuxième DAO et de définir la référence d'objetb dans Objecta. p>
Prenez cette étape plus loin et vous n'avez même pas besoin de la DAO pour ObjectB! P>
Merci..Ce est ce que je travaille. Puis-je s'il vous plaît obtenir un exemple de la façon dont cette cartographie semblerait (je n'ai pas beaucoup de chance sur Google). De plus, avec les mappages corrects, aurais-je toujours besoin de spécifier un "join" dans mon DAO?
@ ES11: Je vois que vous avez résolu votre problème .. content de pouvoir aider. Pour répondre à votre question: Ce que vous avez semble suffisant, donc non, en dehors de vos mappages, vous n'aurez pas à déclarer une jointure lors de la récupération de vos objets de la DAO.
Je préfère personnellement éviter les références entre les DAOS. Si j'ai besoin d'une donnée récupérée par DAO pour effectuer une autre opération, je découplie les DAOS:
// Bad - have to inject Dao into antoher Dao class FooDao extends BaseDao { BarDao barDao; public Foo complexLoad() { return doFooStuff(barDao.loadBar()); } } // Good - dependency on Bar only, not to Dao class FooDao extends BaseDao { public Foo complexLoad(Bar bar) { return doFooStuff(bar); } }
http://www.theserverside.com/discussions/thread.tss ? thread_id = 32661 p>
Cela vous aidera .. p>
Je dirais non, j'ai expliqué dans un autre fil Stackoverflow.com/questions/8988252/CAN-A -Dao-Call-dao