Existe-t-il un moyen d'exécuter ces requêtes comme si je leur ai ajouté un indice (NOLOCK)?Requêtes Java Hibernate HQL avec nolock
Répondre
Si vous avez vraiment besoin de cela, alors que vous voulez faire quelque chose comme:
session.connection().setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
qui est identique à un nolock.
Avant de faire cela, pensez vraiment sérieusement si vous voulez faire une lecture sale. La plupart du temps, les gens font cela parce que c'est ce qu'ils ont toujours fait, plutôt que parce que c'est la bonne chose à faire. En particulier, cela ne fonctionne pas bien avec la mise en cache.
En fait, this thread va un peu dans les problèmes. Lisez attentivement avant de décider.
Dans la dernière version de mise en veille prolongée, vous devez le faire de cette façon:
Session session = (Session) em.getDelegate();
session.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
}
});
J'ai utilisé cette méthode pour définir des niveaux d'isolation de transaction read_uncommitted sur certaines requêtes, mais je me suis rendu compte que le montant de la connexion a été augmenté plusieurs fois plus que le montant sans connexion. Le montant de la connexion sur notre serveur Websphere qui contient l'application était 4 pour un utilisateur avant les transactions read_uncommitted et ensuite il est devenu 80. Est-ce normal? Ou devrais-je chercher autre chose et ailleurs pour trouver le problème? – CntkCtn
Vous pouvez faire « avec (nolock) » si vous allez natif. C'est extrême mais si l'alternative change le niveau d'isolation de la transaction, vous pourriez plutôt le faire.
Notez que cet exemple est pour MSSQL.
String sqlQueryString = "SELECT * FROM my_classes_table WITH (nolock) WHERE columnName = :columnValue";
SQLQuery sqlQuery= session.createSQLQuery(sqlQueryString).addEntity(MyClass.class);
sqlQuery.setLong("columnValue", value);
List<MyClass> out = sqlQuery.list();
- 1. HQL vs SQL/Hibernate Netbeans éditeur HQL
- 2. Java et Hibernate - HQL agrégat alias
- 3. HQL: requête Hibernate avec ManyToMany
- 4. Hibernate HQL et Date
- 5. Hibernate HQL Query Columns
- 6. héritage Hibernate et HQL
- 7. Hibernate HQL requête - compliquée
- 8. Hibernate SQL à HQL
- 9. NHibernate requêtes HQL
- 10. NHibernate HQL Subselect requêtes
- 11. HQL groupe à l'aide de requêtes par
- 12. HQL et un à plusieurs requêtes
- 13. Hibernate, renvoie un objet personnalisé avec des critères ou HQL
- 14. Hibernate. Convertir HQL Critères API
- 15. construction d'une requête Hibernate HQL
- 16. Hibernate HQL m: n rejoindre problème
- 17. annotations hibernate, requête hql par des interfaces?
- 18. Requêtes Hibernate
- 19. chaîne Unicode dans les requêtes Hibernate
- 20. Hibernate HQL: deux niveaux de jointures
- 21. Hibernate HQL au SQL de base (pas de jointures)
- 22. Convertir hibernate HQL avec collection.size en critères de requête
- 23. Comment interroger une date dans HQL (Hibernate) avec Joda Time?
- 24. NOLOCK avec Linq to SQL
- 25. Où sont les exemples de requêtes NHibernate/Hibernate HQL et ICriteria?
- 26. Hibernate HQL requête en utilisant comme opérateur
- 27. Propriété calculée Hibernate et requêtes SQL
- 28. Conversion de la requête Hibernate linq en HQL
- 29. Hibernate désactiver cache de requêtes
- 30. HQL équivalent 'parsename'
Merci, Gary. Oui, je cherchais des lectures sales. Nos DBA ont recommandé NOLOCK pour tous les "sélects" dans cette zone du projet. Les problèmes étaient, une partie des SQLs étaient hibernate. – Sarit
Dans les dernières versions d'Hibernate, connection() semble être retiré de l'API. Des idées sur la façon dont un effet similaire peut être obtenu sans objet de connexion? –
Si vous utilisez l'annotation '@ Transactional', elle peut être spécifiée comme propriété' isolation'. – Tobb