최대 절전 모드 대 JPA 대 JDO-각각의 장단점? [닫은]


174

저는 ORM을 개념으로 잘 알고 있으며 몇 년 전 .NET 프로젝트에 nHibernate를 사용해 왔습니다. 그러나 Java의 ORM 주제를 따라 가지 않았으며 이러한 도구를 사용할 기회가 없었습니다.

그러나 이제는 일련의 레거시 웹 서비스에서 벗어나기 위해 응용 프로그램 중 하나에 일부 ORM 도구를 사용하기 시작할 수 있습니다.

JPA 사양, Hibernate 라이브러리 자체로 얻을 수있는 것 및 JDO가 제공하는 것 사이의 차이점을 알려주는 데 어려움을 겪고 있습니다.

그래서 나는이 질문이 약간 개방적이라는 것을 알고 있지만 다음과 같은 의견을 얻고 자했습니다.

  • 각각의 장단점은 무엇입니까?
  • 새로운 프로젝트를 제안 하시겠습니까?
  • 한 프레임 워크와 다른 프레임 워크를 사용하는 것이 합리적 일 수있는 특정 조건이 있습니까?

답변:


112

몇 가지 참고 사항 :

  • JDO와 JPA는 모두 구현이 아니라 사양입니다.
  • 표준 JPA 만 사용하도록 코드를 제한하는 경우 JPA 구현을 교체 할 수 있습니다. (JDO 용 Ditto)
  • Hibernate는 JPA의 그러한 구현 중 하나로 사용될 수 있습니다.
  • 그러나 Hibernate는 JPA 이상의 기능을 가진 네이티브 API를 제공합니다.

IMO, 나는 최대 절전 모드를 추천합니다.


일부 댓글 / 당신이 경우에 당신이 무엇을해야하는지에 대한 질문이 있었다 필요가 최대 절전 모드 - 특정 기능을 사용 할 수 있습니다. 이것을 보는 많은 방법이 있지만, 나의 충고는 :

  • 벤더 연계 가능성에 대해 걱정하지 않는다면, Hibernate와 의사 결정의 다양한 벤더별 확장을 포함 하여 다른 JPA 및 JDO 구현 중에서 선택 하십시오.

  • 공급 업체 연계 가능성에 대해 걱정하고 공급 업체별 확장을 사용하지 않고 JPA를 사용할 수없는 경우 JPA를 사용하지 마십시오. (JDO 용 Ditto).

실제로, 당신은 아마 트레이드 오프를해야합니다 얼마나 많은 당신이 대 타이 인 공급 업체에서 걱정 얼마나 당신이 그 벤더의 특정 확장이 필요합니다.

또한 직원 / 각 직원이 각 기술을 얼마나 잘 알고 있는지, 라이센스 비용이 얼마나 드는지, 향후 JDO 및 JPA에 대해 향후 어떤 일이 일어날 지에 대한 이야기와 같은 다른 요인들도 있습니다.


8
좋고 짧은 툴킷. 언급해야 할 또 다른 요점은 JPA가 필요한 경우 구현 특정 기능을 사용하지 못하게한다는 것입니다. 즉, Hibernate가 구현 된 경우 JPA를 통해 Hibernate 기능을 사용할 수 있습니다.
topchef

1
Hibernate의 특정 기능이 필요한 경우 JPA를 사용하면 어떤 이점이 있습니까?
Bruno Reis

22
추가해야 할 중요 사항 : JPA와 JDO는 모두 RDBMS를 지원하지만 JDO는 '데이터 스토어'와 무관하므로 RDBMS 세계에만 국한되지 않습니다. 현재 NoSQL이 팽배 해지면서 기존의 * SQL 세계에 앱을 잠그지 않는 지속성 표준을 사용하는 것이 현명합니다. JDO 애플리케이션은 비 RDBMS 데이터 스토어에 쉽게 배치 할 수 있습니다. 지원되는 데이터 스토어의 전체 목록은 다음에서 확인할 수 있습니다. datanucleus.org/products/accessplatform/datastores.html
Volksman

2
@Golfman 이유는 무엇인지에 따라 선택할 수있는 일이? NoSQL 지원이 필요한 경우 KISS
TM.

1
@Bruno - 당신은 최대 절전 모드의 비 최대 절전 모드 - 특정 부분을 사용하는 경우, 당신은 되는 JPA를 사용. 분명히 자신을 순수한 JPA로 제한하면 다른 JPA 구현으로보다 쉽게 ​​전환 할 수 있다는 장점이 있습니다.
Stephen C

69

JDO의 DataNucleus 구현을 평가하십시오. 우리는 Hibernate로 시작하여 매우 인기가 있었지만 곧 100 % 투명한 지속성 솔루션이 아니라는 것을 깨달았습니다. 주의해야 할 사항이 너무 많으며 설명서에는 '이 상황이 발생하면 이와 같이 코드를 작성해야합니다.'라는 자유롭게 모델링과 코딩의 재미를 없앨 수 있습니다. JDO는 코드 나 모델이 '제대로 작동'되도록 조정 한 적이 없습니다 . 단순한 POJO를 '메모리에서'만 사용하는 것처럼 디자인하고 코딩 할 수 있지만 투명하게 유지할 수 있습니다.

최대 절전 모드에 비해 JDO / DataNucleus의 또 다른 장점은 모든 런타임 반영 오버 헤드가없고 빌드 타임 바이트 코드 향상 (대규모 프로젝트의 빌드 시간에 1 초 추가)을 사용하기 때문에 메모리 효율성이 높다는 것입니다. 최대 절전 모드의 런타임 반영 기반 프록시 패턴보다.

Hibernate에서 짜증나는 또 다른 것은 객체라고 생각하는 것에 대한 참조가 객체의 '프록시'라는 것입니다. 바이트 코드 향상의 이점없이 요청시로드를 허용하려면 프록시 패턴이 필요합니다 (즉, 최상위 레벨 오브젝트를 가져올 때 전체 오브젝트 그래프를 가져 오지 마십시오). 참조한다고 생각하는 객체는 종종 해당 객체의 프록시 일 뿐이므로 equals와 hashcode를 재정의 할 준비를하십시오.

다음은 JDO에서 얻을 수없는 Hibernate에서 얻을 수있는 좌절의 예입니다.

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

'해결 방법'으로 코딩하는 것을 좋아한다면 최대 절전 모드가 적합합니다. 모델링, 디자인 및 코딩에 모든 시간을 소비하고 추악한 해결 방법에 대한 시간을 소비하지 않는 깨끗하고 순수한 객체 지향 모델 중심 개발에 감사 한 경우 JDO / DataNucleus 평가에 몇 시간을 소비하십시오 . 투자 한 시간은 천 배로 상환됩니다.

2017 년 2 월 업데이트

꽤 오랫동안 DataNucleus는 JDO 지속성 표준 외에도 JPA 지속성 표준을 구현하므로 기존 JPA 프로젝트를 Hibernate에서 DataNucleus로 포팅하는 것은 매우 간단해야하며 코드 변경이 거의없이 위에서 언급 한 DataNucleus의 이점을 모두 얻을 수 있습니다. , 만약에 어떠한. 따라서 질문, 특정 표준, JPA (RDBMS 전용) 대 JDO (RDBMS + SQL 없음 + ODBMSes + 기타)의 선택과 관련하여 DataNucleus는 두 가지를 모두 지원하며 최대 절전 모드는 JPA로만 제한됩니다.

최대 절전 모드 DB 업데이트 성능

ORM을 선택할 때 고려해야 할 또 다른 문제는 더티 검사 메커니즘의 효율성입니다. 이는 현재 트랜잭션에서 변경된 오브젝트를 업데이트하기 위해 SQL을 구성해야 할 때, 특히 많은 오브젝트가있을 때 매우 중요합니다. 이 SO 답변에는 Hibernate의 더티 검사 메커니즘에 대한 자세한 기술 설명이 있습니다. HIBERNATE 인서트가 매우 느린 JPA


3
그리고 우리 모두 알다시피, 향상은 JDO가 그렇게 광범위하게 채택 된 이유입니다.
Pascal Thivent

15
JDO와 관련하여 초기에 주요 Hibernate 플레이어가 실행 한 잘 알려진 FUD와 astroturfing은 부정직하고 역겨운 것이 아니며 JDO의 채택에 어떤 영향을 미쳤습니다. 요즘 개발자들은 바이트 코드 향상이 전혀 문제가 아니라는 점을 알고 있으며 지속성 이외의 많은 다른 목적으로 사용하기도합니다. 새로운 ASM 바이트 코드 향상 라이브러리는 매우 빠르기 때문에 숨을 쉴 시간이 없습니다.
Volksman

7
JDO의 실패는 시작 이후 ( javalobby.org/forums/thread.jspa?forumID=46&threadID=1326 ) Hibernate 이전 에 예측 되었으므로 Hibernate를 비난 할 수 없습니다. Hibernate / Toplink는 썬과 JDO 플레이어 (및 그들의 OODBMS)가 마케팅과 FUD가 아니라 당시에 더 나은 답변으로 인해 실패한 곳에서 성공했습니다. 기간. 오늘날 ASM이 빠르게 타 오르고 있는지 걱정하는 사람은 5 년 전이 아니 었습니다. 필요할 때 JDO는 단순히 전투에서 패했습니다. JDO는 개념적으로 우수합니까? 너무 나쁘고, 제 시간에 승자 구현을하지 못했습니다 (JPA로 돌아 오지 않을 것입니다).
Pascal Thivent

2
내 말을 설명하기 위해 (사람들이 개발하는 동안 기분이 나 있다고 고통을 보여 또 다른 포스트 Hibernate가 전투에서 승리 한 이유) : mail-archive.com/open-jpa-dev@incubator.apache.org/...를 . reflection / cglib는 사람들의 문제에 대한 실질적인 답변 (그리고 사람들이 API가 사용하기가 고통 스럽다면 개념적으로 우월한 지 신경 쓰지 않는다)이며 분명히 여기에는 사용자 만 Hibernate 핵심 플레이어가 보이지 않습니다. . 결국 나는 누가 실제로 FUD를 유포하는지 궁금합니다.
Pascal Thivent

7
글쎄요, 이것은 적어도 17 개의 서로 다른 프로 하이버 네이트 FUD 게시물이 있었던 과거와는 다릅니다 (아직 3 개의 다른 IP 주소에서만 나옵니다. 수학 = =)).
Volksman

54

최근에 Java 프로젝트의 지속성 프레임 워크를 평가하고 선택했으며 결과는 다음과 같습니다.

내가보고있는 것은 JDO 를지지하는 지원 이 주로 다음과 같습니다.

  • 비 SQL 데이터 소스, db4o, hbase, ldap, bigtable, couchdb (cassandra 용 플러그인) 등을 사용할 수 있습니다.
  • SQL에서 비 SQL 데이터 소스로 또는 그 반대로 쉽게 전환 할 수 있습니다.
  • 프록시 객체가 없으므로 해시 코드 () 및 equals () 구현과 관련하여 고통이 적습니다.
  • 더 많은 POJO 및 따라서 더 적은 해결 방법이 필요합니다
  • 더 많은 관계 및 필드 유형 지원

JPA 를지지하는 지원 은 주로 다음과 같습니다.

  • 더 유명한
  • jdo는 죽었다
  • 바이트 코드 향상을 사용하지 않습니다

JDO를 사용하지 않는 것에 대한 약한 주장을 제공하는 JDO / Datanucleus를 분명히 사용하지 않은 JPA 개발자의 많은 pro-JPA 게시물이 표시됩니다.

또한 JDO로 마이그레이션하여 결과적으로 훨씬 행복한 JDO 사용자로부터 많은 게시물을보고 있습니다.

JPA가 더 널리 사용되는 것과 관련하여 이는 기술적으로 우수하지 않고 RDBMS 공급 업체 지원으로 인해 발생한 것으로 보입니다. (VHS / Betamax와 같은 소리가 나에게 들립니다).

JDO와 그것의 참조 구현 Datanucleus는 구글이 GAE를 위해 그것을 채택하고 소스 코드 (http://sourceforge.net/projects/datanucleus/)에서 적극적으로 개발 한 것처럼 명백히 죽지 않았다.

바이트 코드 향상으로 인해 JDO에 대한 많은 불만이 있었지만 왜 나쁜지에 대한 설명은 없습니다.

실제로 NoSQL 솔루션에 점점 더 집착하는 세상에서 JDO (및 데이터 핵 구현)는 훨씬 더 안전한 방법으로 보입니다.

방금 JDO / Datanucleus를 사용하기 시작했으며 db4o와 mysql을 쉽게 전환 할 수 있도록 설정했습니다. db4o를 사용하는 빠른 개발에 도움이되고 데이터베이스에 배포하기 위해 스키마가 안정화되면 DB 스키마에 대해 너무 걱정할 필요가 없습니다. 또한 나중에 애플리케이션의 전체 / 일부를 GAE에 배포하거나 너무 많은 리팩토링없이 분산 스토리지 / 맵 감소를 활용하여 라하베이스 / 하둡 / 카산드라를 줄일 수 있다고 확신합니다.

Datanucleus를 시작하는 초기 장애물이 조금 까다로웠다는 것을 알았습니다. datanucleus 웹 사이트의 문서는 조금 다루기가 어렵습니다. 튜토리얼은 내가 좋아하는 것처럼 쉽게 따라갈 수 없습니다. 그러나 API 및 매핑에 대한 자세한 문서는 초기 학습 곡선을 벗어나면 매우 좋습니다.

답은 원하는 것에 달려 있습니다. 오히려 더 깨끗한 코드, 벤더 잠금, 포지 지향, nosql 옵션이 더 대중적입니다.

다른 개발자 / 양의 대다수와 같은 따뜻한 느낌을 원한다면 JPA / 최대 절전 모드를 선택하십시오. 현장에서 리드하려면 JDO / Datanucleus 드라이브를 테스트하고 마음을 정하십시오.


9
실제로, 내가 말했듯이, 나는 해결책을 고르는 동안 발견 한 것에 대한 인상을주었습니다. 예, 저는 Java 초보자입니다. 왜 그렇게 관련이 있습니까? 반면에, 귀하는 JDO가이를 입증 할 사실이나 증거를 제공하지 않고 JDO가 명백히 우수한 기술 분야를 인정하지 않으면 서 JDO가 죽었다는 귀하의 의견을 여러 번 게시했습니다. 당신은 분명히 JDO / Datanucleus에 대해 개인적인 것을 가지고 있으며 이러한 스레드들을 당신의 반 JDO 자세를 영속시키는 수단으로 사용하고 있습니다.
Tom

4
파스칼-당신은 여기 모퉁이에 자신을 주장하고 있습니다. FAQ의 광고 섹션의 요점이 누락 된 것 같습니다. OP는 2 가지 기술에 대한 의견을 물었다. 양측을지지하는 사람들에게 건설적인 비판과 권고를 제시하고 제시하도록 권유하고 있습니다. Andy / Datanucleus 및 기타 JDO 사용자에게 JDO 긍정을 강조하고 비판을 방어하는 것은 더 이상 동면 사용을 권장하는 다른 사람보다 광고가 아닙니다.
Tom

5
이 주제에 대한 귀하의 게시물에 대해 '좋아요'라고 표시된 FAQ 섹션을 참조하는 것이 좋을 수도 있습니다. 첫 번째는 향상에 대한 냉담한 의견이었습니다. 둘째; 초기 구현의 어려움에 대한 열망과 더 이상 관련이 없습니다. 세 번째는 RDBMS를 사용하지 않으려는 사람들에게 유치한 조롱과 모욕이었습니다. 넷째, 당신과 다른 견해를 가진 사람을 냉혹하게 조롱했습니다. 다섯 번째는 공격이었다. 앵무새라고 불러 이 '좋은 것'이라고 생각하십니까?
Tom

3
JDO에 대한 끔찍한 경험이 있다면 끔찍한 것이 무엇인지 설명하고, 이전 버전에 있었으며 그 이후로 상황이 개선되었을 수 있음을 인정하십시오. 또한 다른 사람들이 당신에게 다른 요구를 가질 수 있음을 인식해야합니다. JPA에 만족하고 RDBMS를 사용한다고해서 다른 사람들이 그런 것을 의미하지는 않습니다. 어쩌면 당신의 명성을 높이기 위해 서둘러 그 명성이 무엇인지를 잃어 버렸습니까? 추신. 개발자는 혁신을 주도하고 공급 업체의 참여를 줄이는 것과 같은 프로젝트의 복지에 관심을 가져야합니다.
Tom

6
이것이 나의 최종 답변이 될 것입니다 :) .. 1. 왜 그것을 제기하는 것이 의문의 여지가 없다면? 2. 나는 당신의 정직성에 의문을 제기하지 않았습니다. 나는 당신이 다른 포스터를 좋아하지 않고 자신과 모순된다고 말했습니다. 3. 8 년 이상을 요약 한 사람은 아무도 없습니다. 그러나 불쾌감을 줄 수있는 주관적인 진술보다는 사실과 예를 들어 진술을 뒷받침하십시오. 5.이 게시물에서 'hibernate / jpa / jboss is evil'태도는 어디에 있습니까? 나는 그것을 보지 못한다. 반 JDO 의견 만 보았습니다.
Tom

40

새로운 프로젝트를 제안 하시겠습니까?

나는 둘 다 제안하지 않을 것이다! 사용 스프링 DAO의 JdbcTemplate와 함께 StoredProcedure, RowMapper그리고RowCallbackHandler 대신.

Hibernate에 대한 저 자신의 개인적인 경험은 예기치 않은 계단식 업데이트 동작과 같은 문제를 이해하고 디버깅하려고 노력하는 데 줄을 서서 끝날 것입니다.

관계형 DB를 사용하는 경우 코드가 코드에 가까울수록 더 많이 제어 할 수 있습니다. Spring의 DAO 레이어는 매핑 코드를 세밀하게 제어하면서 상용구 코드가 필요하지 않습니다. 또한 Spring의 트랜잭션 계층에 통합되어 코드에 침입하지 않고도 복잡한 트랜잭션 동작을 AOP를 통해 쉽게 쉽게 추가 할 수 있습니다 (물론 Hibernate로도 얻을 수 있습니다).


4
이는 ODBC 시간 (90 년대 초) 이후 축적 된 대규모 사용자 및 코드 기반 (레거시 읽기)에 의해 주도되는 객체 반대 관계 매핑 (ORM) 선택입니다. ORM 프레임 워크로 이동하여 사용하기로 선택하지 않는 한, Spring을 사용하거나 사용하지 않고 JDBC를 사용하지 않는 이유는 없습니다. 언젠가 FORTRAN을 버리고 C 또는 Pascal을 사용하기로 결정한 사람들을 생각해보십시오.
topchef

23
@grigory-계단식 업데이트 / 삭제, 엄청나게 비효율적 인 쿼리 구조 등과 같은 최대 절전 모드 문제를 이해하려는 데 많은 시간을 허비 한 경험이 있습니다. ORM 솔루션은 관계형 데이터베이스에 대한 이해가 불충분 한 사용자에게는 "빠른 승리"입니다. 따라서 최대 절전 모드에 대한 지식만으로도 최종 제품이 좋은 결과를 얻을 수는 없습니다. 그것이 저장보다 프로젝트 라이프 사이클에 걸쳐, Hibernate는 (그리고 확장에 의해 ORM)이 더 많은 시간을 비용, 내 경험이다
oxbow_lakes

8
Hibernate에 대한 경험이 부족하여 죄송합니다. 나는 무거운 데이터베이스 / SQL / 저장 프로 시저 / JDBC 학교에서 왔습니다. 나는 내가 변환한다고 말할 수 없다-위의 모든 기술은 여전히할만한 곳이 있습니다. 그러나 범용 Java 3 계층 응용 프로그램 (크기에 상관없이)이 우선적으로 선택하는 것은 ORM 기술입니다. JPA 2입니다. 레거시 코드, 통합, 전문 지식, 배치가 많은 요구 사항, 실시간 등의 요소를 기준으로 다른 요소를 고려해야합니다. 다른 데이터베이스 기술 스택으로 접근 할 수있는 성능 등.
topchef

3
위의 "빠른 승리"정의에 완전히 동의하지 않습니다. Hibernate in Action ( stackoverflow.com/questions/96729/… )을 잡고이 기술의 힘과 범위를 완전히 이해하기 위해 JPA 1, JPA 2 만 향상됩니다. 있다.
topchef

7
나는 약간의 연구를했으며 Spring은 더 이상 Spring DAO ( static.springsource.org/spring/docs/3.0.x/… )를 권장하지 않는다 : "권장되는 통합 스타일은 일반 Hibernate, JPA 및 JDO API에 대해 DAO를 코딩하는 것입니다. Spring의 DAO 템플릿을 사용하는 오래된 스타일은 더 이상 권장되지 않습니다. "... 이것이 권장하는 것입니까? 그렇다면 왜 권장하지 않습니까?
사용자

23

JDO가 죽었다

JDO는 실제로 죽지 않았으므로 사실을 확인하십시오. JDO 2.2는 2008 년 10 월에 출시되었습니다. JDO 2.3은 개발 중입니다.

이것은 Apache에서 공개적으로 개발되었습니다. JPA보다 많은 릴리스가 있으며 ORM 사양은 여전히 ​​JPA2가 제안한 기능보다 앞서 있습니다.


12
DataNucleus가 Kodo의 Xcalia를 신경 쓰지 않는 많은 사용자들에 의해 입증 된 것처럼 사람들은 확실히 그것을 사용하고 있습니다. JDO와 JPA가 같은 시장을 채우지 않는다는 기본 아이디어를 놓쳤습니다. JPA는 독점적으로 RDBMS입니다. JDO는 데이터 저장소 불가지론과 RDBMS에 사용뿐만 아니라, LDAP, XML, 엑셀, OODBMS 등
DataNucleus

3
나는 비 RDBMS 요소, 특히 비 RDBMS 솔루션의 인기가 증가함에 따라 큰 비중을 차지합니다. 즉, JPA가 충분히 빠르게 발전하지 않으면 "보다 개방적이며 유연한 대안 (JDO)"의 가용성은 JPA의 인기가 불필요하게 하향 추세가 될 것임을 의미합니다. JDO가 더 완벽하고, 우수하고, 성숙하거나, 또는 다른 무엇이든 선호 한다는 것은 기술적 인 주장에 신경 쓰지 마십시오 . RDBMS 공급 업체가 의심스럽게 행동하고 있다는 사실은 합리적입니다. RDBMS 시장 지배의 시대는 끝날 수 있습니다.
매니 우스

2019 년에도 JDO / DataNucleus를 사용하고 있습니다! 현재 버전 5.x이며 개발자 생산성 및 런타임 성능면에서 여전히 최대 절전 모드를 능가합니다. 최근에는 Hibernate를 사용하여 대형 웹 앱에 대한 컨설팅을 수행해야했으며 몇 년 전에 활동적인 Hibernate 사용자 및 발기인 일 때 나는 고통을 상기 시켰습니다. 게으른 페치로 표시되었지만 항상 열심히 페치되었습니다. "경험이 풍부한"자체 선포 한 Hibernate 전문가에 의한 "비 정기적"지식의 완전한 부족은 슬프게도 혼란 스러웠지만 예상되었다.
Volksman


10

JPA (아파치의 OpenJPA 구현은 5 세 이상이고 매우 빠르고 신뢰할 수있는 KODO JDO 코드베이스를 기반으로합니다)를 사용하고 있습니다. IMHO가 사양을 우회하도록 지시하는 사람은 나쁜 조언을합니다. 나는 시간을 투자했고 확실히 보상을 받았다. JDO 또는 JPA를 사용하면 최소한의 변경으로 공급 업체를 변경할 수 있습니다 (JPA에는 orm 맵핑이 있으므로 공급 업체를 변경하기 위해 하루도 채 걸리지 않습니다). 내가하는 것처럼 100 + 테이블이 있다면 이것은 거대합니다. 또한 클러스터 방식의 캐시 제거 기능과 모든 기능을 갖춘 캐싱 기능을 내장하고 있습니다. SQL / Jdbc는 고성능 쿼리에는 적합하지만 투명한 지속성은 알고리즘 및 데이터 입력 루틴 작성에 훨씬 뛰어납니다. 전체 시스템에 약 16 개의 SQL 쿼리 만 있습니다 (50k + 코드 라인).


8

나는 이것을 직접 조사해 왔으며 둘 사이의 큰 차이점을 찾을 수 없습니다. 가장 큰 선택은 사용하는 구현입니다. 나 자신을 위해 DataNucleus 플랫폼은 데이터 저장소와 무관하게 두 가지를 모두 구현하므로 고려하고 있습니다.


6
답이 아닌 DataNucleus의 경우 +1입니다.
WolfmanDragon

8

JDO가 죽었다고 말하는 사람은 누구나 야심 찬 FUD 상인이며 그것을 알고 있습니다.

JDO는 살아 있고 훌륭합니다. 이 사양은 훨씬 젊고 제한된 JPA보다 훨씬 강력하고 성숙하며 고급입니다.

JPA 표준에서 사용 가능한 것만으로 자신을 제한하려는 경우 JPA에 작성하고 DataNucleus를 다른 JPA 구현보다 고성능의 투명한 지속성 구현으로 사용할 수 있습니다. 물론 DataNucleus는 JDO가 제공하는 모델링의 유연성과 효율성을 원할 경우 JDO 표준도 구현합니다.


1
또는 훨씬 더 크고 결과적으로 반응이 빠른 커뮤니티와 함께 ​​또 다른 (정확한) 구현을 사용합니다. 예, 어떤 사람들도 그 일을 처리합니다.
Pascal Thivent

1
그리고 당신은 FUD> :) Funny에 대해 이야기합니다.
Pascal Thivent

2
귀하의 의견은 최대 절전 모드와 JDO를 모두 사용하지 않았다고 가정합니다.
Volksman

2
이 스레드는 몇 사람들이 DataNucleus가 얼마나 훌륭한 지에 대한 수많은 참조를 가지고있는 것 같습니다. 이 장소를 광고 플랫폼으로 사용하지 마십시오.
TM.

3
JPA 또는 DataNucleus를 포함하는 모든 스레드에서 반복해서 같은 절망적 인 마케팅 물건을 붙여 넣기한다 Golfman에서 의외 아무것도 (자신이 사용하고있는 1996 년부터 전에, 심지어 존재 !).
Pascal Thivent

2

동일한 프로젝트에서 Hibernate (JPA 구현) 및 JPOX (JDO 구현)를 사용했습니다. JPOX는 정상적으로 작동했지만 당시에는 지원하지 않는 Java 5 언어 기능이있는 버그가 상당히 빨리 발생했습니다. XA 트랜잭션을 잘 플레이하는데 문제가있었습니다. JDO 객체에서 데이터베이스 스키마를 생성하고있었습니다. 오라클 연결이 작동하지 않으면 성가신 매번 데이터베이스에 연결하려고했습니다.

그런 다음 최대 절전 모드로 전환했습니다. 우리는 잠시 동안 순수한 JPA를 사용하여 놀았지만 매핑을 수행하기 위해 일부 Hibernate 특정 기능을 사용해야했습니다. 여러 데이터베이스에서 동일한 코드를 실행하는 것은 매우 쉽습니다. 최대 절전 모드는 개체를 적극적으로 캐시하거나 때로는 이상한 캐싱 동작을하는 것 같습니다. Hibernate가 처리 할 수없는 몇 가지 DDL 구조가 있으므로 데이터베이스를 초기화하기 위해 실행되는 추가 파일에 정의되어있다. 최대 절전 모드 문제를 겪을 때 종종 같은 문제가 발생하여 솔루션에 대한 인터넷 검색을 쉽게하는 사람들이 많이 있습니다. 마지막으로, 최대 절전 모드는 잘 설계되고 신뢰할 수있는 것 같습니다.

다른 응답자는 SQL 사용을 제안했습니다. 객체 관계형 매핑의 실제 킬러 사용 사례는 테스트 및 개발입니다. 많은 양의 데이터를 처리하기 위해 구축 된 데이터베이스는 일반적으로 비싸거나 설치하기가 어렵습니다. 테스트하기가 어렵습니다. 테스트에 사용할 수있는 인 메모리 Java 데이터베이스는 많지만 일반적으로 프로덕션에는 쓸모가 없습니다. 실제이지만 제한된 데이터베이스를 사용할 수 있으면 개발 생산성과 코드 안정성이 향상됩니다.


1
내가 알 수있는 한, JPOX는 이름을 DataNucleus로 변경했습니다 (그리고 그 이후 릴리스가있었습니다).
Donal Fellows

2
실제로 DataNucleus가 참조하는 다른 소프트웨어보다 오픈 버그가 적다는 것을 알게 될 것입니다. 또한 DataNucleus 개발이 다른 소프트웨어보다 더 빠른 속도로 버그 수를 줄인다는 것을 알게 될 것입니다.
DataNucleus

1

2012 년 5 월에 JDO 3.0 및 DataNucleus 3.0을 사용하는 샘플 WebApp을 작성했습니다. 얼마나 깨끗한 지 살펴보십시오. https://github.com/TorbenVesterager/BadAssWebApp

데이터베이스와 JSON 클라이언트 모두에 POJO를 사용하기 때문에 약간 깨끗합니다.하지만 재미 있습니다 :)

PS : SuppressWarnings 주석이 포함되어 있습니다 (IntelliJ 11에서 개발).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.