2010-06-11 3 views
7

J'utilise les annotations d'hibernation. Comment ajouter des méthodes à l'objet POJO? Par exemple, j'ai la méthode "getChildNodes", associée à la base de données, mais je veux aussi ajouter la méthode récursive "getAllChildNodes". Je reçois "org.hibernate.PropertyNotFoundException: Impossible de trouver un setter pour la progression de la propriété dans la classe" exception quand je le fais.Java, annotations Hibernate, comment ajouter des méthodes à l'objet POJO?

+0

montrez votre code. – Bozho

Répondre

9

Si j'interprète cela comme « comment puis-je ajouter une méthode qui n'est pas lié à la persistance », alors vous devez utiliser l'annotation @Transient sur la méthode getAllChildNodes()

+0

Je suis confus. N'ajoute-t-il plus de fonctionnalités supplémentaires telles que getAllChildNodes(), ou publish() par exemple, ne le rend plus un POJO? Et viole donc un principe de conception des objets d'hibernation devant être des POJO et est donc "mauvais"? Mais pourquoi serait-ce mauvais? Je veux faire cela mais je ne suis pas sûr que ce soit la bonne façon. – pete

-1

Ouvrez le fichier .java et écrivez une méthode nommée getAllChildNodes().

Hibernate n'écrit pas de code pour vous, il mappe les champs de votre base de données sur votre code. C'est tout. Si vous voulez avoir une logique supplémentaire dans vos classes de domaine/modèle en plus des getters et setters normaux pour vos propriétés, vous devrez les ajouter vous-même.

1

Il existe deux façons de définir la structure de votre entité .

  • utilisant des annotations sur les variables d'instance de votre entité ou
  • utilisant des annotations sur les méthodes de lecture de votre entité

Lorsque vous utilisez les annotations sur les méthodes de lecture, Hibernate suppose que tous les getXXX (et isXxx pour les types booléens) représente la définition d'une propriété persistante. Et cela est valable même si ce getter particulier ne contient aucune annotation, comme cela se produit dans votre cas. Hibernate s'attend également à trouver une méthode de mise en correspondance pour chaque propriété persistante. Et dans votre cas c'est ce qui manque et provoque l'exception.

Vous pouvez résoudre ce problème en déclarant votre getter personnalisé comme @Transient qui indique que ce getter ne représente pas une propriété persistante. Une autre méthode consiste à convertir l'entité pour utiliser des annotations sur les variables d'instance. Ce dernier serait mon choix personnel.

Questions connexes