Di JPA dan Spring, dapatkah unit persistensi dibuat dengan cepat?

Jadi tampaknya kita perlu membuat unit persistensi dengan cepat. Pada dasarnya kami memiliki layanan web ini dan sekumpulan skema identik dengan kelas domain yang identik. Kami ingin dapat meneruskan kueri ke layanan web yang jalur konteksnya cocok dengan skema. Pertama kali layanan ditanyakan, lalu masukkan nama skema itu dan buat unit persistensi dengan cepat dan kemudian gunakan setiap saat setelahnya dan ulangi proses tersebut setiap kali permintaan dibuat dari layanan untuk skema yang belum dibuat. dibuat.

Apakah ini mungkin menggunakan Spring dan JPA mengingat semua bangunan yang harus diselesaikan saat permulaan untuk pembuatan PU normal? Apakah ide brilian ini dapat dikembangkan?


person non sequitor    schedule 15.10.2009    source sumber
comment
Yang Anda maksud dengan skema adalah skema database? Apakah Anda juga membuatnya saat runtime atau sudah ditentukan sebelumnya?   -  person ChssPly76    schedule 16.10.2009
comment
Ah kita bertemu lagi haha ​​-- pada dasarnya ditentukan sebelumnya oleh proses yang berbeda   -  person non sequitor    schedule 16.10.2009


Jawaban (1)


Jadi, jika skema database Anda sudah ditentukan sebelumnya, saya tidak mengerti mengapa Anda ingin membuat unit persistensi "dengan cepat".

Satu-satunya contoh - dan cukup dibuat-buat - menurut saya hal tersebut mungkin masuk akal adalah jika jumlah skema agak besar dan Anda tidak mengharapkan semuanya diperlukan selama Anda layanan seumur hidup. Meski begitu, yang Anda simpan hanyalah sebagian memori.

Jadi, kecuali saya melewatkan sesuatu di sini (dan jika ya, harap jelaskan apa yang ingin Anda capai dengan membuat unit persistensi "dengan cepat"), saya sarankan Anda menentukan terlebih dahulu semua unit persistensi Anda. Anda kemudian dapat membuat atau memasukkan instance EntityManagerFactory yang sesuai dengan menentukan nama unit persistensi sebagai parameter.

person ChssPly76    schedule 15.10.2009
comment
Bukan ide brilian saya tetapi tampaknya kami tidak ingin menulis semua PU yang diperlukan di file persistence.xml tetapi saya mencoba meyakinkan bahwa kami hanya perlu menulis PU di file xml dan kemudian menulis EntityManagerFactoryBeans tambahan. Jadi, ketika klien baru ditambahkan, skema baru dibuat dan kemudian layanan web audit kami digunakan untuk menanyakan tabel temporal yang akan menjadi objek domain yang hanya dapat dibaca dan tidak dapat diubah. Jadi menurut saya kita harus menggunakan cache L2 -- bagaimana cara Anda mengintegrasikan Memcached dengan Hibernate? - person non sequitor; 16.10.2009
comment
Sangat dapat dimengerti jika Anda tidak ingin mereplikasi semua kode itu di persistence.xml tetapi tidak ada yang menghalangi Anda melakukan sedikit keajaiban XSLT. Intinya adalah jauh lebih mudah melakukannya pada waktu build dibandingkan pada saat runtime. Sejauh memcached berjalan, saya belum pernah menerapkannya dalam produksi (telah menggunakan ehcache dan jboss cache untuk cluster) tetapi memiliki penyedia (pihak ketiga) untuk Hibernate (code.google.com/p/hibernate-memcached); tidak ada alasan mengapa itu tidak berhasil. - person ChssPly76; 16.10.2009
comment
Juga jika saya menambahkan skema baru, apakah ada cara untuk memuat PU baru karena ditambahkan secara bertahap tanpa memulai ulang server? Saya pikir ini adalah masalah utama, tidak perlu mematikan server untuk menambahkan PU baru sehingga klien dapat menanyakan tabel. - person non sequitor; 16.10.2009
comment
Ah... itu akan menjadi masalah. Dengan Hibernate mentah Anda dapat membangun sessionFactory baru dan menggantinya dengan yang sudah ada. Untuk JPA, Anda ingin menulis PersistenceProvider Anda sendiri untuk melakukan itu. - person ChssPly76; 16.10.2009
comment
Respons yang cukup terlambat tetapi ini merupakan persyaratan yang benar-benar valid dalam kasus aplikasi multi-penyewa di mana setiap penyewa menyimpan datanya dalam database terpisah dengan skema yang sama dan database penyewa tersebut dapat ditambahkan dengan cepat tanpa memulai ulang aplikasi web. - person Yuriy Nakonechnyy; 07.05.2015