2009-03-10 8 views
0

J'utilise hibernate 3.0 (avec posgre 8.3), Java 1.6 et Netbeans 6.5. J'ai créé une requête native de retourner toutes les entrées uniques les plus récents comme celui-ci:Hibernate appelle des méthodes publiques sur les entités après une requête, pourquoi?

String query = "SELECT DISTINCT ON (origem) * FROM entrada " + 
       "ORDER BY origem, horadata DESC"; 
     SQLQuery sqlQuery = this.getSession().createSQLQuery(query); 
     sqlQuery.addEntity(Entrada.class); 
     List entradas = sqlQuery.list(); 

Lorsque le « sqlQuery.list() » est appelé les objets Entrada sont retournés comme prévu. Mais toutes les méthodes publiques non statiques dans l'objet Entrada sont appelées. Je ne veux pas de ce comportement, quelqu'un pourrait m'aider? Merci d'avance.

+0

Comment autrement vous attendez-vous à ce que Hibernate peuple vos objets Entrada? –

+0

À l'aide des méthodes définies? – Ricardo

Répondre

2

Qu'est-ce que "toutes" les méthodes publiques?

Les getters et les setters sont appelés quand hibernate crée les entités et remplit les données de la base de données. Puisque les classes Entity doivent satisfaire à la spécification java, il ne devrait pas y avoir plus de méthodes publiques sauf hashCode(), toString() ...

+0

Vous avez raison, les méthodes get sont appelées. J'ai créé des méthodes dans les entités pour appeler d'autres méthodes sur les DAO. Je n'ai pas l'expérience d'utiliser hibernate et java. – Ricardo

+0

Encore une question! Où devrais-je mettre les méthodes busssiness et d'autres propriétés? – Ricardo

+0

Les entités ne doivent avoir aucune logique métier. Lisez les 100 premières pages de la spécification JPA! À mon avis, la logique métier fait partie d'une couche de persistance. Cette couche fournit des méthodes métier et utilise hibernate/jpa pour faire le mapping OR. – Timo