Erm, maaf semuanya, tetapi Hibernate tidak mengharuskan kelas Anda harus memiliki konstruktor tanpa parameter. Spesifikasi JPA 2.0 membutuhkannya, dan ini sangat timpang atas nama JPA. Kerangka lain seperti JAXB juga membutuhkannya, yang juga sangat timpang atas nama kerangka tersebut.
(Sebenarnya, JAXB seharusnya mengizinkan pabrik entitas, tetapi bersikeras untuk membuat contoh pabrik-pabrik ini dengan sendirinya, mengharuskan mereka untuk memiliki --tebak apa-- konstruktor tanpa parameter , yang dalam buku saya sama baiknya dengan tidak mengizinkan pabrik; betapa payahnya itu !)
Tapi Hibernate tidak membutuhkan hal seperti itu.
Hibernate mendukung mekanisme intersepsi, (lihat "Interceptor" dalam dokumentasi ,) yang memungkinkan Anda untuk membuat instance objek dengan parameter konstruktor apa pun yang mereka butuhkan.
Pada dasarnya, apa yang Anda lakukan adalah ketika Anda mengatur hibernate, Anda meneruskannya objek yang mengimplementasikan org.hibernate.Interceptor
antarmuka, dan hibernate kemudian akan memanggil instantiate()
metode antarmuka itu kapan pun ia membutuhkan instance baru dari objek Anda, sehingga implementasi Anda dari metode itu dapat new
objek Anda dengan cara apa pun yang Anda suka.
Saya telah melakukannya dalam sebuah proyek dan itu bekerja seperti pesona. Dalam proyek ini saya melakukan banyak hal melalui JPA bila memungkinkan, dan saya hanya menggunakan fitur Hibernate seperti interceptor ketika saya tidak punya pilihan lain.
Hibernate tampaknya agak tidak aman tentang hal itu, karena selama startup mengeluarkan pesan info untuk setiap kelas entitas saya, memberi tahu saya INFO: HHH000182: No default (no-argument) constructor for class
dan class must be instantiated by Interceptor
, tetapi kemudian saya membuat instantiate mereka dengan interseptor, dan itu senang dengan itu.
Untuk menjawab bagian "mengapa" dari pertanyaan untuk alat selain Hibernate , jawabannya adalah "sama sekali tidak ada alasan yang baik", dan ini dibuktikan dengan adanya penyergap hibernate. Ada banyak alat di luar sana yang mungkin telah mendukung beberapa mekanisme serupa untuk instansiasi objek klien, tetapi sebenarnya tidak, sehingga mereka membuat objek sendiri, sehingga mereka harus memerlukan konstruktor tanpa parameter. Saya tergoda untuk percaya bahwa ini terjadi karena pencipta alat ini menganggap diri mereka sebagai pemrogram sistem ninja yang membuat kerangka kerja penuh keajaiban untuk digunakan oleh pemrogram aplikasi yang bodoh, yang (menurut mereka) tidak akan pernah dalam mimpi terliar mereka memiliki kebutuhan untuk konstruksi lanjutan seperti ... Pola Pabrik . (Baik,berpikir begitu. Saya tidak benar-benar berpikir begitu. Saya bercanda.)
The no-argument constructor is a requirement
salah , dan semua jawaban yang melanjutkan untuk menjelaskan mengapa demikian tanpa mempertanyakan apakah memang demikian, (termasuk jawaban yang diterima, yang bahkan telah menerima karunia,) salah . Lihat jawaban ini: stackoverflow.com/a/29433238/773113