Je voudrais implémenter quelque chose comme un modèle PDO en conjonction avec Spring. Tous les objets de domaine sont implémentés en fonction de leur interface. Chaque implémentation d'objet de domaine a également une implémentation DAO autowired pour être capable de persister directement l'objet. (par exemple, foo.persist()). Cela fonctionne plutôt bien, Spring insère également la bonne implémentation DAO.Détresse avec Hibernate et Spring et Dynamic Proxies
Pour créer ces beans, j'ai implémenté une BeanFactory qui crée simplement les Beans à l'aide de Spring. Néanmoins Spring crée des proxies dynamiques et c'est là que le problème commence. Une fois que j'ai une relation many-to-one et que j'obtiens deux objets Dynamic Proxy différents. Quand il persiste, Hibernate me dit:
"n'a pas pu obtenir une valeur de champ par l'effet de réflexion".
L'interface des deux objets est défini comme suit:
public interface Client {
public Long getId();
public void setId(Long id);
}
L'interface de l'utilisateur est définie comme suit:
public interface User {
public Long getId();
public Client getClient();
public void setClient(Client client);
public void setId(Long id);
}
La mise en oeuvre de l'utilisateur se fait en fonction de l'APP , J'ai utilisé la balise targetEntity pour créer un lien vers la bonne implémentation de l'objet Client. Néanmoins, la persistance ne fonctionne pas lors de l'insertion d'un objet Client qui a été créé via Spring. J'espère que quelqu'un de votre côté peut vous aider à résoudre ce problème.
Cordialement
Matthias
En quoi cela ne fonctionne-t-il pas? Avez-vous une exception? Quelle? –
Pour les curieux, j'ai trouvé un article de modèle PDO à http://www.theserverside.com/patterns/thread.tss?thread_id=33387 – KLE
Martin fowler a également une entrée de blog à ce sujet (http: //www.martinfowler. com/bliki/AnemicDomainModel.html). Mais contrairement à l'article ServerSide, il précise (5ème paragraphe) qu'il ne préconise pas de mélanger la couche de persistance dans les objets du domaine. – KLE