2009-06-18 9 views
0

J'ai une méthode simple qui fait juste deux lignes et essaie de retourner tous les objets dans une table de base de données Oracle:comportement étrange Hibernate findByCriteria

DetachedCriteria criteria = DetachedCriteria.forClass(Object.class); 
return (Collection)getHibernateTemplate().findByCriteria(criteria); 

Cependant, je me suis un « ORA-01031: privilèges insuffisants » erreur . Lorsque j'ai vérifié les journaux pour le show_sql, je trouve ceci:

Hibernate: select this_.NAME as NAME8_0_, from PL_VW this_ where ID=? 
Hibernate: update PL_VW set NAME=? where ID=? 
Hibernate: update PL_VW set NAME=? where ID=? 
Hibernate: update PL_VW set NAME=? where ID=? 
Hibernate: update PL_VW set NAME=? where ID=? 
Hibernate: update PL_VW set NAME=? where ID=? 
... 

Pourquoi ne findByCriteria sélectionner un ID et faire plusieurs mises à jour? Doit-on mettre à jour l'accès pour toutes les tables accrochées à hiberner? Je ne souhaite pas que les tables soient mises à jour!

Ou est quelque chose qui ne va pas avec le code?

Merci d'avance.

+0

Je ne sais pas pourquoi vous voyez des instructions UPDATE ici, mais je crois que DetachedCriteria.forClass (Object.class) retourne tous les objets mappés dans la base de données entière. Est-ce ce que vous vouliez? –

+0

Je ne pense pas que les entrées de journal correspondent au code. Êtes-vous sûr que quelque chose ne va pas? – stevedbrown

Répondre

0

Oui, il était supposé renvoyer tous les objets.

J'ai découvert le problème le plus évident non:

Dans la méthode getName, je l'ai fait quelques fonctions de sous-chaînes et retourne une chaîne modifiée.

Je suppose que Hibernate a immédiatement essayé de mettre à jour la base de données avec ce qui était retourné dans getName. (Quoi ?! Pourquoi ?!)

Est-ce que cela a été mentionné n'importe où dans les documents Hibernate ou était-ce censé être le bon sens ??? Quel noob je suis.

Merci les gars de toute façon pour toute votre aide.