2009-10-19 12 views
0

J'ai utilisé Hibernate + HSQLDB sur mon bureau pour développer un adaptateur de base de données pour mon application. Pour des raisons héritées, les ID sont générés par l'application en tant que chaînes. Tout fonctionnait bien alors.Hibernate Impossible de démarrer sur une base de données à grande échelle

Maintenant, nous avons une base de données pré-prod, avec un peu plus d'un million d'enregistrements. J'ai dû faire quelques changements (par exemple, identifiant trop long) du côté de Hibernate, mais rien de majeur.

C'est, jusqu'à ce que je suis arrivé à ce problème. Lorsque j'essaie de démarrer mon application sur le serveur de pré-prod, Hibernate commence à faire des requêtes de gazillions, qui finissent par se retrouver dans un espace de tas Java OutOfMemoryError: Java. Augmenter le maximum de tas n'aide pas. J'ai désactivé les paramètres de cache C3PO et désactivé hibernate.hbm2ddl.auto. Je ne sais pas pourquoi il fait ces requêtes, et je ne sais pas comment les désactiver.

Quelqu'un peut-il m'aider ??????

+2

Quel type de requêtes est-il en train d'exécuter? Hibernate ne fait pas de requêtes seul, il les émet parce que votre application l'a demandé. – skaffman

+0

Vous avez raison. J'ai eu une requête factice au démarrage pour m'assurer que nous avons touché la base de données. J'ai enlevé cela et je suis capable de démarrer l'application. Mais cela ne fait que déplacer le problème, car au moment où une requête DB est exécutée, les requêtes gazillion sont exécutées. – malaverdiere

Répondre

1

Vous avez dit à Hibernate d'aller chercher avec impatience. Ainsi, lorsque vous chargez le premier objet, Hibernate commence à récupérer tous les objets associés.

Vous devez définir toutes les relations inutiles à fetch=LAZY.

+0

C'est bon. J'ai désactivé toutes les options d'extraction (laissant ainsi Hibernate le comprendre avec ses valeurs par défaut) et je n'ai pas cette situation. Cependant, j'ai un comportement de blocage maintenant. :( – malaverdiere

+0

Vous devez trouver un équilibre entre fainéant paresseux et désireux.Et vous devez vous assurer que vous utilisez l'imbrication correcte des transactions.Bonne chance de débogage.Je suggère généralement des cas de test, mais il est difficile de trouver des tests pour les blocages . –