Hibernate vs JPA vs JDO - her birinin artıları ve eksileri? [kapalı]


174

ORM'i bir kavram olarak tanıyorum ve hatta birkaç yıl önce bir .NET projesi için nHibernate kullandım; ancak, Java'da ORM konusunu takip etmedim ve bu araçlardan herhangi birini kullanma şansım olmadı.

Ancak, şimdi bir dizi eski web hizmetinden uzaklaşmak için bazı ORM araçlarını uygulamalarımızdan biri için kullanmaya başlayabilirim.

JPA spesifikasyonları, Hibernate kütüphanesinin kendisi ile ne elde ettiğiniz ve JDO'nun neler sunabileceği arasındaki farkı anlatmakta zorlanıyorum.

Yani, bu sorunun biraz açık uçlu olduğunu anlıyorum, ancak şu konularda bazı görüşler almayı umuyordum:

  • Her birinin artıları ve eksileri nelerdir?
  • Yeni bir proje için hangisini önerirsiniz?
  • Bir çerçeveyi diğerine karşı kullanmanın mantıklı olacağı belirli koşullar var mı?

Yanıtlar:


112

Bazı notlar:

  • JDO ve JPA, uygulama değil teknik özelliklerdir.
  • Fikir, kodunuzu yalnızca standart JPA kullanmakla kısıtlarsanız JPA uygulamalarını değiştirebilirsiniz. (JDO için aynen.)
  • Hazırda bekletme, bu tür bir JPA uygulaması olarak kullanılabilir.
  • Bununla birlikte, Hibernate, JPA'nın üzerinde ve ötesinde özelliklere sahip yerel bir API sağlar.

IMO, Hibernate'i tavsiye ederim.


Hazırda Bekletme'ye özgü özellikleri kullanmanız gerekiyorsa ne yapmanız gerektiği hakkında bazı yorumlar / sorular var . Buna bakmanın birçok yolu var, ama benim tavsiyem:

  • Tedarikçi bağlanma olasılığı konusunda endişelenmiyorsanız, Hazırda Bekletme ile karar verme sürecinde çeşitli satıcıya özgü uzantılar dahil olmak üzere diğer JPA ve JDO uygulamaları arasında seçiminizi yapın.

  • Satıcının bağlanması olasılığından endişe duyuyorsanız ve satıcıya özgü uzantılara başvurmadan JPA kullanamıyorsanız, JPA kullanmayın. (JDO için aynen).

Gerçekte, muhtemelen trade-off gerekecektir ne kadar sen karşı tie-satıcı tarafından endişeli ne kadar o satıcı belirli uzantıları gerekir.

Ayrıca, sizin / personelinizin ilgili teknolojileri ne kadar iyi bildikleri, ürünlerin lisanslamada ne kadar tutacağı ve JDO ve JPA için gelecekte ne olacağına dair hikayesine inandığınız gibi başka faktörler de vardır.


8
güzel ve kısa. Bahsetmeye değer başka bir nokta, JPA'nın gerektiğinde uygulamaya özgü özellikleri kullanmasını engellememesidir. Bu, JPA'nın Hazırda Bekletme bir uygulama olduğunda herhangi bir Hazırda Bekletme özelliğini kullanmanızı sağlar.
topchef

1
Hazırda Bekletme'den belirli bir özelliğe ihtiyacım olursa JPA kullanmanın avantajları nelerdir?
Bruno Reis

22
Eklenmesi gereken önemli bir not: JPA ve JDO'nun her ikisi de RDBMS'ler için mükemmel desteğe sahipken JDO 'veri deposu' agnostiktir ve bu nedenle RDBMS dünyası ile sınırlı değildir. Şu anda NoSQL'in zemin şişmesi ile bir kişi, uygulamalarını geleneksel * SQL dünyasına kilitlemekten kaçınan bir kalıcılık standardı kullanmayı düşünmek akıllıca olacaktır. JDO uygulamaları RDBMS olmayan veri depolarına kolayca dağıtılabilir. Desteklenen veri depolarının tam listesini şu adreste bulabilirsiniz: datanucleus.org/products/accessplatform/datastores.html
Volksman

2
@Golfman neden ne olabileceğini seçmelisiniz ? Daha sonra NoSQL desteğine ihtiyaç duyduysanız, başka bir şeyde yuvarlanmanızı engelleyecek bir şey yok ... KISS
TM.

1
@Bruno - Eğer hazırda olmayan hazırda özgü parçalar kullanırken, sen edilir JPA kullanarak. Açıkçası, kendinizi saf JPA ile sınırlamanın avantajı, başka bir JPA uygulamasına daha kolay geçiş yapabilmenizdir.
Stephen C

69

JDO'nun DataNucleus uygulamasını değerlendirdiğinizden emin olun. Hibernate ile başladık, çünkü çok popüler görünüyordu, ancak çok yakında bunun% 100 şeffaf bir kalıcı çözüm olmadığı anlaşıldı. Çok fazla uyarı var ve belgeler, ancak bu duruma sahipseniz, istediğiniz gibi özgürce modelleme ve kodlama eğlencesini ortadan kaldıran kodunuzu bu şekilde yazmalısınız. JDO, kodumun veya modelimin 'düzgün çalışması' için ayarlamamı hiç sağlamadı . Basit POJO'ları sadece 'bellekte' kullanacakmışım gibi tasarlayabilir ve kodlayabilirim, ancak şeffaf bir şekilde devam edebilirim.

Hazırda bekletme modundaki JDO / DataNucleus'un diğer avantajı, çalışma zamanı yansıması yüküne sahip olmaması ve daha fazla bellek verimliliği sağlamasıdır, çünkü bunun yerine derleme zamanı bayt kodu geliştirmeyi kullanır (belki de büyük bir proje için derleme sürenize 1 sn ekleyin) hazırda bekletme modunun çalışma zamanı yansıması ile çalışan proxy kalıbından daha fazla.

Hibernate ile sinir bozucu bulabileceğiniz başka bir şey, nesne olduğunu düşündüğünüz bir referansın nesnedir ... genellikle nesne için bir 'proxy' dir. Bayt kodu geliştirmenin avantajı olmadan, isteğe bağlı yüklemeye izin vermek için proxy kalıbı gerekir (yani, bir üst düzey nesneyi çekerken tüm nesne grafiğinizi çekmekten kaçının). Eşitlediğinizi ve hashcode'u geçersiz kılmaya hazır olun çünkü başvurduğunuzi düşündüğünüz nesne genellikle bu nesne için bir proxy'dir.

Hibernate ile JDO ile elde edemeyeceğiniz hayal kırıklıklarına bir örnek:

http://blog.andrewbeacock.com/2008/08/how-to-implement-hibernate-safe-equals.html
http://burtbeckwith.com/blog/?p=53

'Geçici çözümlere' kodlamayı seviyorsanız, Hazırda Bekletme tam size göre. Modelleme, tasarım ve kodlamaya tüm zamanınızı harcadığınız temiz, saf, nesne odaklı, modele dayalı geliştirmeyi takdir ediyorsanız ve bunların hiçbirini çirkin geçici çözümlerde harcamayın, JDO / DataNucleus'u değerlendirmek için birkaç saat harcayın . Yatırım yapılan saatler bin kat geri ödenecek.

Güncelleme Şubat 2017

Uzun bir süredir DataNucleus, JDO kalıcılık standardına ek olarak JPA kalıcılık standardını uygulamaktadır, bu nedenle mevcut JPA projelerinin Hazırda Bekletme'den DataNucleus'a taşınması çok basit olmalıdır ve DataNucleus'un yukarıda belirtilen tüm avantajlarını çok az kod değişikliği ile elde edebilirsiniz. , varsa. Yani soru açısından, belirli bir standart, JPA (yalnızca RDBMS) ve JDO (RDBMS + Hayır SQL + ODBMSes + diğerleri) seçimi, DataNucleus her ikisini de destekler, Hazırda Beklet yalnızca JPA ile sınırlıdır.

Hazırda Bekletilen DB güncellemelerinin performansı

Bir ORM seçerken göz önünde bulundurulması gereken bir diğer konu, kirli kontrol mekanizmasının verimliliğidir - bu, mevcut işlemde değişen nesneleri güncellemek için SQL oluşturması gerektiğinde çok önemli hale gelir - özellikle çok fazla nesne olduğunda. Hibernate'in kirli kontrol mekanizmasının bu SO cevabında ayrıntılı bir teknik açıklaması var: HIBERNATE insertli JPA çok yavaş


3
Hepimizin bildiği gibi, geliştirme tam olarak JDO'nun bu kadar kitlesel olarak benimsenmesinin nedenidir!
Pascal Thivent

15
JDO ile ilgili olarak ilk günlerde önemli Hibernate oyuncuları tarafından yürütülen iyi duyurulmuş FUD ve astroturf, sahtekar ve iğrenç bir şey değildir ve şüphesiz JDO'nun benimsenmesi üzerinde bazı etkileri olmuştur. Günümüzde geliştiriciler bayt kodu geliştirmenin bir sorun olmadığını biliyorlar ve genellikle kalıcılık dışında birçok farklı amaç için kullanıyorlar. Yeni ASM bayt kodu geliştirme kütüphanesi o kadar hızlı ki, bitmeden nefes almak için zamanınız bile yok.
Volksman

7
JDO'nun başarısızlığı başlangıçtan bu yana ( javalobby.org/forums/thread.jspa?forumID=46&threadID=1326 ) ve Hazırda Bekletmeden önce tahmin edildi, bu nedenle Hazırda Beklet'i suçlayamazsınız. Hazırda Bekletme / Toplink, Sun ve JDO oyuncularının (ve OODBMS'lerinin) başarısız olduğu yerlerde başarılı oldu çünkü pazarlama ve FUD nedeniyle değil, o zaman daha iyi cevaplardı. Dönemi. ASM bugün hızlı yanıp sönüyorsa kimin umurunda , 5+ yıl önce orada değildi, gerektiğinde JDO savaşı kaybetti. JDO kavramsal olarak üstün mü? Çok kötü, zamanında kazanan bir uygulama yapamadı (ve JPA nedeniyle geri gelmeyecek).
Pascal Thivent

2
Sözlerimi göstermek için (insanların gelişim sırasında hissettikleri acıyı veya Hibernate'in savaşı neden kazandığını gösteren başka bir yazı): mail-archive.com/open-jpa-dev@incubator.apache.org/… . Yansıma / cglib'in insanların sorunlarına pratik bir cevap olduğu açıktır (ve insanlar bir API'nin kullanmak için acı çekiyorsa kavramsal olarak üstün olup olmadığını umursamıyorlar) ve burada herhangi bir Hibernate anahtar oyuncusu görmüyorum, sadece kullanıcılar . Sonunda kimin
FUD'yi yaydığını

7
Peki bu kesinlikle en az 17 farklı profesyonel Hibernate FUD gönderisinin olduğu eski günler gibi değil (ancak sadece 3 farklı IP adresinden geliyor. Matematik insanlar = =)).
Volksman

54

Son zamanlarda bir java projesi için bir kalıcılık çerçevesi değerlendirip seçtim ve bulgularım aşağıdaki gibidir:

Ne görüyorum ki JDO lehine destek öncelikle:

  • sql olmayan veri kaynakları, db4o, hbase, ldap, bigtable, couchdb (cassandra için eklentiler) vb.
  • bir sql'den sql olmayan veri kaynağına veya tam tersine kolayca geçiş yapabilirsiniz.
  • proxy nesnesi yok ve bu nedenle hashcode () ve equals () uygulamalarında daha az acı var
  • daha fazla POJO ve dolayısıyla daha az geçici çözüm gerekir
  • daha fazla ilişki ve alan türünü destekler

ve JPA lehine destek öncelikle:

  • daha popüler
  • jdo öldü
  • bayt kodu geliştirme kullanmaz

JDO / Datanucleus'u JDO kullanmadığı için zayıf argümanlar sunan açıkça kullanmayan JPA geliştiricilerinden bir çok JPA yanlısı gönderi görüyorum.

JDO'ya geçiş yapan ve sonuç olarak çok daha mutlu olan JDO kullanıcılarından da birçok yayın görüyorum.

JPA'nın daha popüler olması açısından, bunun kısmen teknik olarak üstün olmaktan ziyade RDBMS satıcı desteğinden kaynaklandığı görülmektedir. (Bana VHS / Betamax gibi geliyor).

JDO ve referans uygulaması Datanucleus, Google'ın GAE'yi benimsemesi ve kaynak kodunda aktif geliştirme (http://sourceforge.net/projects/datanucleus/) tarafından gösterildiği gibi açıkça ölmedi.

Bayt kodu geliştirme nedeniyle JDO ile ilgili birtakım şikayetler gördüm, ancak neden kötü olduğu için henüz bir açıklama yok.

Aslında, NoSQL çözümleri tarafından giderek daha saplantı haline gelen bir dünyada, JDO (ve datanucleus uygulaması) çok daha güvenli bir bahis gibi görünüyor.

Ben sadece JDO / Datanucleus kullanmaya başladım ve db4o ve mysql arasında kolayca geçiş yapabilmeniz için ayarladım. Hızlı gelişim için db4o kullanmak ve DB şeması hakkında çok fazla endişelenmenize gerek kalmaz ve daha sonra, şema bir veritabanına dağıtılacak şekilde sabitlendiğinde. Daha sonra başvurumun tamamını / bir kısmını GAE'ye dağıtabileceğime veya çok fazla yeniden düzenleme yapmadan dağıtılmış depolama / harita azaltma la hbase / hadoop / cassandra'dan yararlanabileceğime eminim.

Datanucleus ile başlamanın ilk engelini biraz zor buldum - Datanucleus web sitesindeki belgelere girmek biraz zor - öğreticiler istediğim gibi takip etmek kolay değil. Bununla birlikte, ilk öğrenme eğrisini geçtikten sonra API ve haritalandırma hakkında daha ayrıntılı belgeler çok iyi.

Cevap, ne istediğinize bağlı. Daha temiz bir kod, daha fazla satıcı kilidi yok, daha pojo odaklı, nosql seçenekleri ayetler daha popüler olurdu.

Diğer geliştiricilerin / koyunların çoğuyla aynı şekilde yaptığınız sıcak telaşlı hissi istiyorsanız, JPA / hazırda bekletme'yi seçin. Alanınızda liderlik yapmak istiyorsanız, JDO / Datanucleus'u test edin ve kendi kararınızı verin.


9
Aslında, dediğim gibi, bir çözüm seçmeye çalışırken keşfettiğim şeyler hakkında izlenimlerimi veriyordum. Evet, Java'da yeni başlayan biriyim, neden bu kadar alakalı olsun ki? Öte yandan, JDO'nun onu doğrulamak için herhangi bir gerçek veya kanıt sunmadan ve JDO'nun açıkça üstün olduğu teknik alanları kabul etmeden öldüğünü belirten birkaç kez yayınladınız. Açıkçası JDO / Datanucleus'a karşı kişisel bir şeyiniz var ve bu konuları JDO karşıtı duruşunuzu sürdürmek için bir araç olarak kullanıyorsunuz.
Tom

4
Pascal - kendinizi burada köşeye sıkıştırıyorsunuz. Sanırım SSS bölümünün Reklamcılık bölümünün noktasını kaçırıyorsunuz. OP 2 teknoloji hakkında görüş istedi. Her iki tarafı destekleyenleri öne çıkarmaya ve yapıcı eleştirilerini / önerilerini sunmaya davet ediyor. Andy / Datanucleus ve diğer JDO kullanıcıları için JDO pozitiflerini vurgulamak ve eleştirilere karşı savunmak, burada hazırda bekletmeyi öneren başka birinden daha fazla reklam değildir.
Tom

5
SSS'nin bu konuyla ilgili yayınlarınız için suçlayıcı, çatışmacı veya açık kaba olduğu 'kısmına bakın. İlk olarak geliştirme ile ilgili alaycı bir yorum oldu. İkinci; erken uygulamaların zorlukları üzerinde duruyordu ve artık geçerli değil. Üçüncüsü, çocuksu bir alay ve RDBMS kullanmayı tercih edemeyenlere hakaretti. Dördüncüsü, size farklı görüşleri olan birinin alaycı alaycılığıydı. Beşinci saldırı oldu; bana papağan diyor. Bunu 'iyi olmak' olarak mı düşünüyorsunuz?
Tom

3
JDO ile korkunç bir deneyim yaşadıysanız, neyin korkunç olduğunu açıklayın, daha önceki bir sürümle olduğunu ve o zamandan beri bazı şeylerin iyileştirilmiş olabileceğini kabul edin. Ayrıca, başkalarının size farklı ihtiyaçları olabileceğini de bilmeniz gerekir. JPA'dan 'memnun' olmanız ve bir RDBMS kullanmak istemeniz, başkalarının olduğu anlamına gelmez. Belki de itibarınızı arttırmak için acele ettiğinizde, bu itibarı ödüllendirmek için ne olduğunu gözden kaçırdınız mı? ps. Bir geliştirici olarak, inovasyonu teşvik eden ve satıcı kilidini azaltan bu gibi projelerin refahıyla gerçekten ilgilenmelisiniz.
Tom

6
Bu benim son cevabım olacak :) .. 1. Sormak neden olmasaydı neden yükseltmek? 2. Dürüstlüğünüzü hiç sorgulamadım, diğer posterlere karşı hoş olmadığınızı ve kendinizle çeliştiğinizi söyledim. 3. hiç kimse 8+ yılı özetlemenizi önermedi - ancak ifadelerinizi rahatsız edecek öznel ifadeler yerine gerçekler ve örneklerle yedekleyin. 5. Bu yazıdaki 'hazırda beklet / jpa / jboss kötüdür' tutumu nerededir? Görmüyorum. Yalnızca JDO karşıtı yorumlarınızı görüyorum.
Tom

40

Yeni bir proje için hangisini önerirsiniz?

Ben de öneririm! Kullanım Bahar DAO var JdbcTemplatebirlikte StoredProcedure, RowMapperve RowCallbackHandlerbunun yerine.

Hazırda Bekletme ile ilgili kişisel deneyimim, beklenmedik basamaklı güncelleme davranışı gibi sorunları anlamaya ve hata ayıklamaya çalışmak için satırdan geçireceğiniz sonsuz günlere kadar ön zamandan daha fazla dengelenmesi.

İlişkisel bir DB kullanıyorsanız, kodunuz ne kadar yakınsa, o kadar fazla kontrole sahip olursunuz. Spring'in DAO katmanı, eşleştirme katmanının ince kontrolüne izin verirken, kazan plakası koduna olan ihtiyacı ortadan kaldırır. Ayrıca, Spring'in işlem katmanına entegre olur, bu da kodunuza izinsiz girmeden (AOP aracılığıyla) karmaşık işlem davranışını kolayca ekleyebileceğiniz anlamına gelir (elbette bunu Hazırda Bekletme ile de alırsınız).


4
bu, ODBC zamanlarından (90'lı yılların başından beri) biriken büyük kullanıcı ve kod tabanının (eski okuma) yönlendirdiği açıkça nesneye dayalı ilişkisel eşleme (ORM) seçimidir. ORM çerçevesini kullanmaya devam etmedikçe JDBC'yi (Yaylı veya Yaysız) kullanmamanız için hiçbir neden yoktur. Bir gün C veya Pascal'ı kullanmak için FORTRAN'ı terk etmeye karar veren insanları düşünün.
topchef

23
@grigory - Basamaklı güncellemeler / silmeler, gülünç verimsiz sorgu yapıları vb. gibi Hazırda Bekletme sorunlarını anlamaya çalışarak günlerini boşa harcamaktan çok fazla deneyim ile konuşuyorum. Bu nedenle, sadece Hazırda Beklet bilgisinin iyi bir son ürünle sonuçlanması pek olası değildir. Deneyimime göre, proje yaşam döngüsü boyunca, Hazırda Bekletme (ve uzatma yoluyla ORM) tasarruf
ettiğinden

8
Hibernate ile bu kadar kötü bir deneyim yaşadığınız için üzgünüm. Ben ağır veritabanı / SQL / saklı yordam / JDBC okul kendim geliyor. Dönüştürdüğümü söyleyemem - yukarıdaki her teknolojinin hâlâ bir yeri var. Ancak genel amaçlı olarak Java 3 katmanlı uygulama (hangi boyutta olursa olsun) ilk tercih bir ORM teknolojisidir - tercihen JPA 2'dir. Farklı veritabanı teknolojisi yığınlarına yaklaşmayı yönlendirebilen (veya etmeyebilen) performans vb.
topchef

3
Yukarıdaki "hızlı kazanma" tanımına tamamen katılmıyorum - Hibernate in Action'ı ( stackoverflow.com/questions/96729/… ) alın (ve bu teknolojiyi tam olarak anlamak ve kapsama almak için JPA 1, JPA 2 ile sadece daha iyi olur) vardır.
topchef

7
Biraz araştırma yaptım ve Spring artık Spring DAO'ları ( static.springsource.org/spring/docs/3.0.x/… ) önermiyor : "Önerilen entegrasyon stili DAO'ları düz Hazırda Bekletme, JPA ve JDO API'lerine göre kodlamaktır. Spring'in DAO şablonlarını kullanmanın daha eski bir tarzı artık önerilmiyor; "... Önerdiğiniz şey bu mu? Öyleyse, neden önermiyorlar?
Kullanıcı1

23

JDO öldü

JDO aslında ölmedi, bu yüzden lütfen gerçeklerinizi kontrol edin. JDO 2.2 Ekim 2008'de piyasaya sürüldü JDO 2.3 geliştirilme aşamasındadır.

Bu, Apache altında açıkça geliştirildi. JPA'nın sahip olduğundan daha fazla sürüm ve ORM spesifikasyonu, JPA2'nin önerdiği özelliklerden bile önce


12
İnsanlar kesinlikle kullanmaktadır, DataNucleus'un sahip olduğu birçok kullanıcı tarafından kanıtlandığı gibi, Xcalia, Kodo'ya aldırmayın. JDO ve JPA'nın aynı pazarı doldurmadığı temel fikrini kaçırıyorsunuz. JPA yalnızca RDBMS'dir. JDO veri deposu agnostiktir ve RDBMS için kullanılır, ancak aynı zamanda LDAP, XML, Excel, OODBM'ler vb.
DataNucleus

3
RDBMS dışı faktörü seviyorum, özellikle RDBMS olmayan çözümlerin popülaritesindeki artışla birlikte, büyük bir sorun. Bu, eğer JPA yeterince hızlı gelişmezse, "daha açık" ve esnek bir alternatifin (JDO) mevcudiyetinin, JPA'nın popülaritesinin gereklilikten aşağıya doğru trend olacağı anlamına gelir. JDO'nun daha eksiksiz, üstün, olgun veya başka bir şey olduğuna dair teknik argümanlara aldırmayın - bu bir tercih meselesi olmayacaktır . RDBMS satıcılarının şüpheli davrandığı mantıklıdır - RDBMS pazar hakimiyeti günleri sona eriyor olabilir.
Manius

2019'da hala JDO / DataNucleus kullanıyoruz! Şimdi Sürüm 5.x'e kadar ve geliştirici verimliliği ve çalışma zamanı performansı için Hazırda Beklet'i geçiyor. Son zamanlarda Hibernate kullanarak büyük bir web uygulaması üzerinde bazı danışmanlık yapmak zorunda kaldım ve uzun yıllar önce aktif bir HIbernate kullanıcısı ve destekçisi olduğumda yaşadığım acıyı hatırlattım, bir takım lideri BLOB alanının olduğunu söylediğimde bana inanmadı tembel getirilmiş olarak işaretlenmiş olmasına rağmen her zaman hevesle getirildi. Bir "deneyimli" kendi ilan Hibernate uzmanı tarafından "başlık altında" bilgisinin tam eksikliği ne yazık ki rahatsız edici ama bekleniyordu.
Volksman


10

JPA (5+ yaşında ve son derece hızlı / güvenilir KODO JDO kod tabanına dayanan Apache'den OpenJPA uygulaması) kullanıyorum. IMHO teknik özellikleri atlamanızı söyleyen herkes size kötü tavsiyeler veriyor. Zamanı içeri girdim ve kesinlikle ödüllendirildim. JDO veya JPA ile satıcıları minimum değişikliklerle değiştirebilirsiniz (JPA'nın orm eşlemesi vardır, bu nedenle satıcıları değiştirmek için bir günden az konuşuyoruz). Benim yaptığım gibi 100 + tablolarınız varsa bu çok büyük. Ayrıca küme tabanlı önbellek tahliyeleri ve hepsi iyi ile önbellek oluşturdunuz. SQL / Jdbc, yüksek performanslı sorgular için iyidir, ancak şeffaf kalıcılık, algoritmalarınızı ve veri giriş rutinlerinizi yazmak için çok daha üstündür. Tüm sistemimde sadece 16 SQL sorgusu var (50k + kod satırı).


8

Bunu kendim araştırıyorum ve ikisi arasında güçlü bir fark bulamıyorum. Bence büyük uygulama hangi uygulamayı kullandığınızdır. Kendim için ben dikkate oldum DataNucleus platformunu her ikisinin de veri deposu agnostik bir uygulaması olduğu için düşünüyorum.


6
Yanıt için değil, DataNucleus için +1.
WolfmanDragon

8

JDO'nun öldüğünü söyleyen herkes, bir astroturfing FUD monger ve bunu biliyorlar.

JDO canlı ve iyi. Şartname hala çok daha genç ve kısıtlı JPA'dan daha güçlü, olgun ve gelişmiş.

Kendinizi sadece JPA standardında bulunanlarla sınırlamak istiyorsanız, JPA'ya yazabilir ve DataNucleus'u diğer JPA uygulamalarından daha yüksek performanslı, daha şeffaf bir kalıcılık uygulaması olarak kullanabilirsiniz. Elbette JDO'nun getirdiği modellemenin esnekliğini ve verimliliğini istiyorsanız DataNucleus ayrıca JDO standardını uygular.


1
Ya da çok daha büyük ve sonuç olarak daha duyarlı bir topluluğa sahip başka (iyi) bir uygulama kullanırsınız. Evet, bazı insanlar da bununla ilgileniyor.
Pascal Thivent

1
Ve sen FUD hakkında konuşuyorsun> :) Komik.
Pascal Thivent

2
Yorumunuz hem Hibernate hem de JDO'yu kullanmadığımı varsayıyor.
Volksman

2
Bu iş parçacığının birkaç kişiden DataNucleus'un ne kadar harika olduğuna dair çok sayıda referansı var gibi görünüyor. Lütfen burayı reklam platformunuz olarak kullanmayın.
TM.

3
JPA veya DataNucleus içeren her iş parçacığında aynı umutsuz pazarlama malzemelerini tekrar tekrar yapıştıran Golfman'dan şaşırtıcı bir şey yok ( 1996'dan beri var olmadan bile kullanıyor !).
Pascal Thivent

2

Aynı projede Hibernate (JPA uygulaması) ve JPOX (JDO uygulaması) kullandım. JPOX tamam çalıştı, ancak o zaman desteklemediği bazı Java 5 dil özelliklerinin olduğu yerlerde oldukça hızlı bir şekilde hatalara girdi. XA işlemlerinde hoş oynama problemleri vardı. JDO nesnelerinden veritabanı şeması oluşturuyordum. Oracle bağlantınız çalışmıyorsa her seferinde bir veritabanına bağlanmak istedi.

Ardından Hazırda Bekletme moduna geçtik. Bir süre saf JPA kullanarak oynadık, ancak eşleme yapmak için Hazırda Bekletme özel özelliklerinden bazılarını kullanmamız gerekiyordu. Aynı kodu birden çok veritabanında çalıştırmak çok kolaydır. Hazırda bekletme, nesneleri agresif bir şekilde önbelleğe alıyor veya bazen garip bir önbellekleme davranışına sahip gibi görünüyor. Hibernate'in işleyemediği birkaç DDL yapısı vardır ve bu nedenle veritabanını başlatmak için çalıştırılan ek bir dosyada tanımlanırlar. Bir Hazırda Bekletme sorunuyla karşılaştığımda, çoğu zaman aynı sorunla karşılaşan birçok kişi vardır, bu da çözüm için googling'i kolaylaştırır. Son olarak, Hibernate iyi tasarlanmış ve güvenilir görünüyor.

Diğer bazı yanıtlayıcılar sadece SQL kullanmanızı önerdi. Nesne ilişkisel haritalama için gerçek katil kullanım durumu test ve geliştirmedir. Büyük hacimli verileri işlemek için oluşturulmuş veritabanları genellikle pahalıdır ve kurulması zordur. Test etmek zor. Test etmek için kullanılabilecek, ancak genellikle üretim için işe yaramayan çok sayıda bellek içi Java veritabanı vardır. Gerçek fakat sınırlı bir veritabanı kullanabilmek, geliştirme verimliliğini ve kod güvenilirliğini artıracaktır.


1
Anlayabildiğim kadarıyla, JPOX adı DataNucleus olarak değiştirdi (ve o zamandan beri yayınladı).
Donal Fellows

2
Aslında, DataNucleus'un başvurduğunuz diğer yazılımlardan çok daha az açık hataya sahip olduğunu göreceğinizi düşünün. Ayrıca, DataNucleus geliştirmesinin hata sayısını diğer yazılımlardan daha hızlı azalttığını da düşünün.
DataNucleus

1

Mayıs 2012'de JDO 3.0 ve DataNucleus 3.0 kullanan örnek bir WebApp yaptım - ne kadar temiz olduğuna bir göz atın: https://github.com/TorbenVesterager/BadAssWebApp

Tamam belki biraz temiz, çünkü POJO'ları hem veritabanı hem de JSON istemcisi için kullanıyorum, ama eğlenceli :)

Not: Birkaç SuppressWarnings ek açıklaması içerir (IntelliJ 11'de geliştirilmiştir)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.