위치 모델 클래스가 있습니다. 나는 추상적 인 클래스 Persister를 가지고있다. 나는 추상 클래스 인 MySQLPersister와 MongoDBPersister의 두 가지 구현을 가지고있다. Reasoning은 내가해야 할 때마다 MySQL 또는 MongoDB를 사용하는 것을 전환 할 수 있도록합니다. 동시에 두 가지를 사용하지는 않습니다. 더 많은 유연성을 위해서.JPA와 Morphia를 사용하여 동일한 모델에 적용 할 경우 충돌 프레임이 재생됩니다.
문제가 Location 모델 클래스가 모델을 확장하면 MySQL은 play.db.jpa.Model을 가져와야합니다. MongoDB는 play.modules.morphia.Model을 가져옵니다. 이는 전환 할 때마다 위치 모델 클래스를 변경해야 할뿐만 아니라 모델에 다른 메소드가있는 두 라이브러리로 인해 Persister 구현에서 코드를 변경해야하기 때문에 문제가됩니다.
예를 들어, JPA에서 Morphia로 변경하려면 MySQLPersister에서 코드를 주석 처리해야합니다. Model.find(). fetch()는 JPA에서 Iterable을 반환하고 JPA를 가져올 때 Morphia의 Model.find(). filter(). asList()는 존재하지 않습니다.
어떻게이 문제를 극복합니까? 저는 제네릭 모델 클래스와 각 데이터베이스를 가져 오는 두 개의 동일한 모델 클래스를 만들고 싶지 않습니다. 너무 많은 중복입니다.
는 기본적으로 나는 플레이 모르핀의 디자인을 찾아 플레이 JPA unflexible : 모두play.db.jpa.Model
및
play.modules.morphia.Model
좀 더 일반화 된
Model
클래스에서 확장 된 경우가 더 좋았을 것
JPA PlayMorphia
play.db.jpa.Model > play.modules.morphia.Model
javax.persistence.Entity > com.google.code.morphia.annotations.Entity
. 이 방법을 사용하면 두 데이터베이스를 모두 구현하려는 경우 모델을 변경하지 않아도됩니다.
감사합니다. 제 설명이 명확하지 않은지 알려주세요.
나는 퍼시 스터가 가지고있는 추상적 인 방법을 확장하여 MySQL과 MongoDB를 지속시키는로드와 저장을위한 추상 메소드와 추상적 인 퍼시스를 가지고있다. 이 의미에서 필자는 프레임 워크 종속 계층에 대한 호출을 위임 한 계층 위에 추상 Persister 계층 - 구현 독립적입니다. 그러나 ... 이러한 호출을 위임하는 계층은 모델 자체를 복제하지 않고 수정하는 방법을 모르는 동일한 모델에 의존합니다. –
다른 데이터베이스를 충족시키기 위해 모델을 복제하는 경로를 선택하면 열을 추가하거나 제거해야 할 경우 여러 파일에서 모두 변경해야합니다. 내가 생각할 수있는 다른 해결책은 ORM에 의존하지 않고 Java MongoDB 드라이버를 사용하여 객체를 쿼리하는 것입니다. –