Mengakses Pertanyaan SQL Dihasilkan API Kriteria Hibernate
API Kriteria Hibernate menawarkan cara yang fleksibel untuk membina pertanyaan pangkalan data yang rumit. Walau bagaimanapun, ia tidak secara langsung mendedahkan SQL yang dihasilkan. Ini boleh menjadi masalah apabila anda perlu memeriksa atau melaraskan SQL sebelum pelaksanaan. Panduan ini menggariskan kaedah untuk mendapatkan semula SQL yang mendasari.
Kaedah 1: Memanfaatkan CriteriaImpl dan CriteriaQueryTranslator
Pendekatan ini melibatkan mengakses objek CriteriaImpl
dalaman. Dengan menghantar contoh Criteria
anda kepada CriteriaImpl
, anda mendapat akses kepada SessionImplementor
dan SessionFactoryImplementor
. Ini kemudiannya digunakan untuk mencipta CriteriaQueryTranslator
untuk menjana SQL.
<code class="language-java">CriteriaImpl criteriaImpl = (CriteriaImpl) criteria; SessionImplementor session = criteriaImpl.getSession(); SessionFactoryImplementor factory = session.getFactory(); CriteriaQueryTranslator translator = new CriteriaQueryTranslator(factory, criteriaImpl, criteriaImpl.getEntityOrClassName(), CriteriaQueryTranslator.ROOT_SQL_ALIAS); //Further processing of translator object to get SQL</code>
Kaedah 2: Menggunakan CriteriaJoinWalker dan SQLString
Sebagai alternatif, kelas CriteriaJoinWalker
menyediakan laluan terus ke rentetan SQL.
<code class="language-java">String[] implementors = factory.getImplementors(criteriaImpl.getEntityOrClassName()); CriteriaJoinWalker walker = new CriteriaJoinWalker((OuterJoinLoadable) factory.getEntityPersister(implementors[0]), translator, factory, criteriaImpl, criteriaImpl.getEntityOrClassName(), session.getLoadQueryInfluencers()); String sql = walker.getSQLString();</code>
Kedua-dua kaedah membolehkan anda mengekstrak SQL yang dijana oleh API Kriteria Hibernate. Ini berharga untuk tugas seperti membina pertanyaan yang lebih kompleks atau membandingkan struktur skema pangkalan data. Ingat bahawa teknik ini memerlukan kelas Hibernate dalaman dan mungkin tertakluk kepada perubahan merentas versi Hibernate. Sentiasa menguji dengan teliti.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeluarkan Pertanyaan SQL Dijana daripada API Kriteria Hibernate?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!