Cet article vous présente le cache de deuxième niveau et les requêtes multi-tables d'Hibernate en Java. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Regardons deux questions d'entretien sur Hibernate, le framework Java. Il s'agit d'un point de connaissance commun sur Hibernate.
1. Veuillez présenter le cache de deuxième niveau d'Hibernate
Répondez à la question selon les idées suivantes :
(1) Tout d'abord, expliquez clairement ce que est le cache ;
(2) De plus, la session avec mise en veille prolongée est le cache de premier niveau, c'est-à-dire qu'avec le cache de premier niveau, pourquoi avons-nous besoin du cache de deuxième niveau ; > (3) Enfin, parlons de la façon de configurer le cache de deuxième niveau d'Hibernate.
Le cache consiste à stocker en mémoire les objets qui ont été interrogés et utilisés à partir de la base de données (dans une structure de données). Cette structure de données est généralement ou similaire à une Hashmap lorsqu'un objet doit être utilisé à l'avenir. , demandez d'abord si l'objet existe dans le cache. Si tel est le cas, utilisez l'objet dans le cache. Sinon, interrogez la base de données et enregistrez l'objet interrogé dans le cache pour une prochaine utilisation. Voici le pseudo-code du cache :
mène au cache de deuxième niveau d'hibernate, et le pseudo-code suivant est utilisé pour analyser le principe d'implémentation du cache.
La session d'Hibernate est une sorte de cache. Nous l'appelons généralement le cache de premier niveau d'Hibernate. Lorsque vous souhaitez utiliser la session pour interroger un objet de la base de données, la session vérifie également d'abord s'il l'a fait. Si cet objet existe, il sera renvoyé directement. S'il n'existe pas, il accédera à la base de données et enregistrera les résultats de la requête en interne. Étant donné que la session représente un processus de session et qu'une session est associée à une connexion à une base de données, il est préférable de ne pas garder la session ouverte pendant une longue période. Elle n'est généralement utilisée que dans une seule transaction et doit être fermée à la fin de la transaction. Et Session n'est pas sécurisée pour les threads et est sujette à des problèmes lorsqu'elle est partagée par plusieurs threads. Habituellement, seul le cache au sens global est la véritable application de cache et a une plus grande valeur de cache. Par conséquent, la fonction de cache du cache au niveau de la session d'Hibernate n'est pas évidente et la valeur de l'application n'est pas grande. Le cache de deuxième niveau d'Hibernate consiste à configurer un cache global pour Hibernate afin que plusieurs threads et plusieurs transactions puissent partager ce cache. Ce que nous espérons, c'est qu'une fois qu'une personne l'a utilisé, d'autres pourront également l'utiliser. Session n'a pas cet effet.Dao { hashmap map = new map(); User getUser(integer id) { User user = map.get(id) if(user == null) { user = session.get(id); map.put(id,user); } return user; } } Dao { Cache cache = null setCache(Cache cache) { this.cache = cache } User getUser(int id) { if(cache!=null) { User user = cache.get(id); if(user ==null) { user = session.get(id); cache.put(id,user); } return user; } return session.get(id); } }
Le cache de deuxième niveau est un composant logiciel indépendant d'Hibernate et est un produit tiers. Plusieurs fournisseurs et organisations proposent des produits de mise en cache, tels que EHCache et OSCache, etc. Pour utiliser le cache de deuxième niveau dans Hibernate, vous devez d'abord configurer le produit de cache du fabricant à utiliser dans le fichier de configuration hibernate.cfg.xml. Vous devez ensuite configurer le propre fichier de configuration du produit de cache. Enfin, vous devez configurer quelle entité. les objets dans Hibernate doivent être inclus dans la gestion du cache de deuxième niveau. Après avoir compris le principe du cache de deuxième niveau et avoir eu cette idée, il est facile de configurer le cache de deuxième niveau d'Hibernate.
Connaissances étendues :Une SessionFactory peut être associée à un cache de deuxième niveau, c'est-à-dire qu'un cache de deuxième niveau ne peut être responsable de la mise en cache des données que dans une seule base de données lors de l'utilisation de la seconde base de données d'Hibernate. -niveau cache, veuillez noter Ne demandez pas à d'autres applications ou à SessionFactory de modifier les données de la base de données actuelle, de sorte que les données mises en cache soient incohérentes avec les données réelles de la base de données. 2. Hibernate effectue une requête multi-table et prend plusieurs champs de chaque table, c'est-à-dire que l'ensemble de résultats de la requête n'a pas de classe d'entité correspondante.
Solution un, extrayez les données en fonction des données Object[], puis formez le bean vous-même
Solution deux, écrivez un constructeur pour le bean de chaque table, par exemple, dans la première table, vous devez connaître field1 et field2 field, puis il existe un constructeur appelé Bean (type1 field1, type2, field2), puis ce bean peut être généré directement dans hql.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!