L'utilisation d'hibernate/hql pour tronquer un tableau?
Quelle est la méthode recommandée pour tronquer un tableau de l'utilisation d'hibernate/hql?
J'ai essayé ceci:
Requête query = session.createQuery("truncate table Matable"); de la requête.executeUpdate();
Mais il ne fonctionne pas (truncate ne semble pas n'être documenté nulle part dans les requêtes hql...)
- Tronquer n'est pas un standard DML ou commande DDL, donc c'est normal que c'est pas pris en charge.
Vous devez vous connecter pour publier un commentaire.
Je suppose une horrible façon de le faire serait de supprimer tous.
Vous pouvez utiliser
session.createSQLQuery()
à la place:Inutile de dire que ce n'est pas l'idéal en termes de portabilité. C'est probablement une bonne idée de définir cette requête dans la cartographie et de la récupérer dans le code comme une requête nommée.
createNativeQuery
est préféré après la version 5.2attention, tronquer et supprimer sont totalement séparés des instructions sql :
- supprimer est DML et tronquer est DDL, ce qui signifie que la suppression peut être rollbacked et tronquer ne peut pas être rollbacked
- supprimer a trouver chaque ligne une par une. tronquer est instantanée
- supprimer les utilisations annuler les journaux et tronquer ne pas
si vous mettez tout cela ensemble :
1/si vous voulez qu'il soit rollbackable, vous ne voulez pas utiliser truncate
2/si vous utilisez supprimer, compte tenu de la taille de la table que vous souhaitez vide :
- si la table est petite, vous ne verrez aucune différence
- si le tableau est de taille moyenne, vous ferez l'expérience de la mauvaise performance
- si la table est grande, vous serez à court d'espace dans le tablespace undo, et vous ne serez pas en mesure de vider tout ce
donc être attentive à ce que la déclaration que vous voulez vraiment utiliser.
comment tronquer un tableau avec hql, il devrait être interdit de courir DDL (tronquée, create table, drop table, etc...) à partir de l'application. Vous devez utiliser les supprimer. Mais si la table est grande, elle ne fonctionne pas, soit.
C'est pourquoi la vidange d'une table dans une application est en général une mauvaise idée.
Si vous voulez faire un peu de nettoyage, il est souvent préférable d'exécuter tronquée à l'intérieur d'un script sql une fois chaque nuit.
Avis que je ne connais pas les détails de votre demande et que c'est seulement de parler, en général
J'ai utilisé la suppression de la syntaxe dans un HQL pour maintenir la portabilité. Fonctionne très bien:
Fonctionne très bien et totalement tronque les tables visées. Utiliser avec prudence, car votre serveur de base de données permettra d'effectuer cette déclaration avec une grande efficacité... 🙂