2011-04-01 5 views
0

J'ai une situation où j'ai des relations de ce type:Hibernate Mapper un objet sans relation

Une personne a une ou plusieurs adresses. Un client a une ou plusieurs adresses. Personne, clients et adresses sont des tables distinctes. J'avais l'habitude de le faire avec les relations @OneToMany. Cela me pose des problèmes car notre client Flex m'envoie des objets créés dans le client et qui doivent être créés dans la base de données.

Si le client m'envoie une personne et un client dont la référence à la même adresse hibernate créera deux objets adresse puisque les deux objets adresse ne sont pas les mêmes objets java (pas les mêmes pointeurs).

Ceci est un problème provoqué par BlazeDS et Dozer qui va créer de nouveaux objets lorsqu'ils sont envoyés au serveur.

Donc, ce que je voudrais avoir est l'id d'adresse dans la personne et l'objet client sans une relation de sorte que Hibernate ne crée pas les objets. Mais quand je lis un objet personnel, je voudrais remplir un objet d'adresse transitoire basé sur l'identifiant d'adresse stocké.

Est-ce que quelqu'un sait si c'est possible?

Répondre

0

Il y a deux questions:

  • chargement Lazy des données et
  • Entité résolution/instance canonique unique d'une entité sur le client

Il existe des cadres disponibles pour aider, mais la problème n'a pas encore une grande solution universelle.

dpHibernate aidera avec le chargement paresseux des données - à savoir:

quand je lis un objet personne que je voudrais remplir un objet d'adresse transitoire en fonction de l'adresse stockée id

Malheureusement, la résolution d'entité n'est pas encore prise en charge pour plusieurs appels dans dpHibernate. à savoir: -.. Si un appel retourne le même objet à deux endroits dans un appel de serveur (par exemple, la même entité Address dans les deux Customer id:1 et Customer id:2 alors vous recevrez une seule instance de Address dans les deux objets du client

Cependant, si les données sont chargées sur des appels séparés, vous recevrez deux instances de Address. Ceci est un issue qui est prévue pour la mise en œuvre en v3.

Je crois que les Cairngorm Integration library tentatives pour résoudre ce problème, mais le wiki suggère qu'il est LCDS Vous pouvez étudier ce qui est nécessaire pour implémenter ceci avec BlazeDS Je n'ai pas utilisé cette bibliothèque, donc je ne peux pas vous dire à quel point cela vous résoudra r questions.

+0

Merci, je vais jeter un oeil à la bibliothèque dpHibernate. Nous avons essayé Gilead car cela semblait prometteur, mais nous avons rencontré une erreur et malheureusement, personne ne répond sur le forum. –

Questions connexes