Locationモデルクラスがあります。抽象クラスPersisterがあります。抽象クラスには、MySQLPersisterとMongoDBPersisterの2つの実装があります。理由は、必要なときにいつでもMySQLとMongoDBのどちらを使用するかを切り替えることができるようにするためです。両方を同時に使用していないことに注意してください。柔軟性を高めるためだけに。
問題は、LocationモデルクラスがModelを拡張することです。MySQLはplay.db.jpa.Modelをインポートする必要があります。MongoDBはplay.modules.morphia.Modelをインポートします。これは問題になります。なぜなら、切り替えるたびに、Locationモデルクラスを変更する必要があるだけでなく、2つのライブラリのモデルのメソッドが異なるため、Persisterの実装のコードも変更する必要があるからです。
たとえば、JPAの使用からMorphiaに変更する場合は、MySQLPersisterのコードをコメントアウトする必要があります。Model.find()。fetch()はJPAでIterableを返し、JPAをインポートするとMorphiaのModel.find()。filter()。asList()は存在しません。
この問題を解決するにはどうすればよいですか?ジェネリックモデルクラスと、各データベースをインポートする2つの同一のモデルクラスを作成したくありません。これは重複が多すぎます。
基本的に、play-morphiaとplay-jpaのデザインは柔軟性がないと思います。
JPA PlayMorphia
play.db.jpa.Model > play.modules.morphia.Model
javax.persistence.Entity > com.google.code.morphia.annotations.Entity
play.db.jpa.Model
両方がより一般化されたクラスplay.modules.morphia.Model
から拡張されていればもっと良かったでしょう。Model
このようにして、両方のデータベースを実装する場合にモデルを変更する必要はありません。
ありがとう!説明が明確でない場合はお知らせください。