Ketika saya memperbarui versi Hibernate dari 3.6.8 ke 4.0.0, saya mendapat peringatan tentang metode usang buildSessionFactory()
di baris ini:
private static final SessionFactory sessionFactory =
new Configuration().configure().buildSessionFactory();
Javadoc merekomendasikan menggunakan metode lain
buildSessionFactory(ServiceRegistry serviceRegistry)
tetapi dalam dokumentasi saya menemukan varian usang :(
Bisakah Anda membantu saya dengan kesalahpahaman kecil ini?
java
hibernate
configuration
deprecated
bootstrapping
mendorong
sumber
sumber
Jawaban:
Ya itu sudah usang. Ganti SessionFactory Anda dengan yang berikut:
Di Hibernate 4.0, 4.1, 4.2
Di Hibernate 4.3 ServiceRegistryBuilder sudah usang . Gunakan yang berikut ini sebagai gantinya.
sumber
Ya, itu sudah usang. http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/cfg/Configuration.html#buildSessionFactory () secara khusus memberitahu Anda untuk menggunakan metode lain yang Anda temukan (
buildSessionFactory(ServiceRegistry serviceRegistry)
) - jadi gunakan saja.Dokumentasi disalin dari rilis ke rilis, dan kemungkinan belum diperbarui (mereka tidak menulis ulang manual dengan setiap rilis) - jadi percayalah pada Javadocs.
Spesifikasi perubahan ini dapat dilihat di:
Beberapa referensi tambahan:
sumber
atau
sumber
Kode diverifikasi untuk berfungsi di Hibernate 4.3.0. Perhatikan Anda dapat menghapus parameter nama file XML, atau berikan path Anda sendiri di sana. Ini mirip dengan (tetapi kesalahan ketik dikoreksi) posting lain di sini, tetapi yang ini benar
sumber
Sesederhana ini: dokumen JBoss tidak 100% terawat dengan baik. Pergi dengan apa yang dikatakan javadoc yang :
buildSessionFactory(ServiceRegistry serviceRegistry)
.sumber
Cara yang lebih baik untuk membuat objek SessionFactory di rilis hibernasi terbaru 4.3.0 dan seterusnya adalah sebagai berikut:
sumber
Sudah lazim menemukan perbedaan antara berbagai versi dokumentasi. Sebagian besar pengembang melihat dokumentasi sebagai tugas, dan mereka cenderung menundanya.
Sebagai patokan, jika javadoc mengatakan satu hal dan beberapa dokumentasi non-javadoc membantahnya, kemungkinan javadoc lebih akurat. Programmer lebih cenderung memperbarui javadoc dengan perubahan kode ... karena "sumber" untuk javadoc berada dalam file yang sama dengan kode.
Dalam hal
@deprecated
tag, adalah kepastian virtual bahwa javadoc lebih akurat. Pengembang mencela hal-hal setelah pertimbangan yang cermat ... dan (secara umum) mereka tidak mengabaikannya.sumber
System.getenv(String)
bugs.sun.com/bugdatabase/view_bug.do?bug_id=4199068Configuration.buildSessionFactory()
;)Jika Anda menggunakan Hibernate 5.2 dan di atasnya maka Anda dapat menggunakan ini:
sumber
TL; DR
Ya itu. Ada beberapa cara yang lebih baik untuk melakukan bootstrap Hibernate, seperti yang berikut ini.
Bootstrap asli-hibernasi
Configuration
Objek warisan kurang kuat daripada menggunakanBootstrapServiceRegistryBuilder
, diperkenalkan sejak Hibernate 4:Bootstrap JPA
Anda juga dapat melakukan bootstrap Hibernate menggunakan JPA:
Dengan cara ini, Anda sedang membangun
EntityManagerFactory
bukanSessionFactory
. Namun,SessionFactory
memperpanjangEntityManagerFactory, so the actual object that's built is a
SessionFactoryImpl` juga.Kesimpulan
Dua metode bootstrap ini memengaruhi perilaku Hibernate. Saat menggunakan bootstrap asli, Hibernate berperilaku dalam mode lama, yang ada sebelum JPA.
Saat bootstrap menggunakan JPA, Hibernate akan berperilaku sesuai dengan spesifikasi JPA.
Ada beberapa perbedaan antara kedua mode ini:
EntityNotFoundException
, oleh karena itu menuntut pemeriksaan DB.sumber
sumber
StandardServiceRegistryBuilder
TIDAK ditinggalkan.public void sampleConnection () melempar Pengecualian {
sumber
Saya mengedit metode yang dibuat oleh batbaatar di atas sehingga ia menerima objek Konfigurasi sebagai parameter:
Di kelas utama saya lakukan:
sumber
Di Hibernate 4.2.2
sumber
sumber
di sini ada banyak API yang tidak digunakan lagi dalam kerangka kerja hibernate.
kami telah membuat pabrik sesi seperti di bawah ini:
SessionFactory sessionFactory = Konfigurasi baru (). Configure (). BuildSessionFactory ();
Metode buildSessionFactory sudah usang dari rilis hibernate 4 dan diganti dengan API baru. Jika Anda menggunakan hibernate 4.3.0 ke atas, kode Anda harus:
Konfigurasi konfigurasi = Konfigurasi baru (). Configure ();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder (). ApplySettings (configuration.getProperties ());
SessionFactory factory = configuration.buildSessionFactory (builder.build ());
Kelas ServiceRegistryBuilder digantikan oleh StandardServiceRegistryBuilder dari 4.3.0. Sepertinya akan ada banyak perubahan pada rilis 5.0. Masih tidak ada banyak kejelasan tentang API yang sudah usang dan alternatif yang cocok untuk digunakan. Setiap rilis tambahan hadir dengan API yang lebih usang, mereka sedang dalam rangka menyempurnakan kerangka inti untuk rilis 5.0.
sumber
Di
hibernate 5.3.1
, Anda dapat mencoba ini:sumber
Jika ada orang di sini setelah memperbarui ke 5.1 ini adalah cara kerjanya
bukannya di bawah ini dalam hibernasi 4.3
sumber
Cukup impor paket berikut,
sumber