English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La struttura del database è la seguente
La tabella strategy ha chiavi esterne member_id (collegata alla tabella member) e strategy_category (collegata alla tabella category), mentre la tabella member ha la chiave esterna position_id (collegata alla tabella positions)
Se la pagina frontend query direttamente i contenuti della tabella stategy, la nostra query hql potrebbe essere scritta così:
String hql = "FromStrategywhereid=:id";
Il console segnala l'errore nosession poiché Hibernate di default utilizza il caricamento lento e carica gli oggetti associati solo quando necessario. In questo caso, quando nel nostro frontend dobbiamo recuperare le proprietà degli oggetti associati, la sessione è stata chiusa e viene segnalato questo errore.
Allora come si può risolvere il problema?
Si consiglia di utilizzare leftjoinfetch per caricare gli oggetti invece di cambiare il caricamento lazy di default annotato in modo che l'efficienza sia molto bassa.
Ecco l'istruzione:
Strategystrategy=(Strategy)sessionFactoryUtil.getSession() .createQuery("FromStrategysleftjoinfetchs.strategyCategoryleftjoinfetchs.memberleftjoinfetchs.member.positionswheres.id=:id") .setInteger("id",id).uniqueResult();
Cosa c'è da notare è che perché la tabella member associata è associata alla tabella positions, è necessario caricare anche quella. Un'altra cosa da notare è che l's.id deve essere scritto così perché in ogni tabella il nome del chiave primaria è id. Se non viene specificato, il sistema non può riconoscerlo.
Sommario
Questo è tutto il contenuto dell'articolo che discute il problema di caricamento urgente di Hibernate (associazione di chiavi esterne multiple), spero che sia utile a tutti. Chi è interessato può continuare a consultare altre sezioni correlate del nostro sito. Siamo aperti a commenti e suggerimenti. Grazie per il supporto degli utenti del nostro sito!
Dichiarazione: il contenuto di questo articolo è stato preso da Internet, il copyright spetta ai rispettivi autori, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, invia una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente il contenuto sospetto di violazione del copyright.