我有一个 Location 模型类。我有一个抽象类,Persister。我有两个抽象类的实现:MySQLPersister 和 MongoDBPersister。推理是为了让我可以在需要时在使用 MySQL 或 MongoDB 之间切换。请注意,我没有同时使用两者。只是为了更灵活。
问题是 Location 模型类扩展了Model,MySQL 必须导入 play.db.jpa.Model。MongoDB 将导入 play.modules.morphia.Model。这成为一个问题,因为每次我想切换时,不仅要更改 Location 模型类,而且由于两个库具有不同的模型方法,我还必须更改 Persister 的实现中的代码。
例如,如果我想从使用 JPA 更改为 Morphia,我必须将 MySQLPersister 中的代码注释掉。Model.find().fetch() 在 JPA 中返回 Iterable,当我导入 JPA 时,Morphia 中的 Model.find().filter().asList() 甚至都不存在。
我该如何克服这个问题?我不想创建一个通用模型类和另外两个导入每个数据库的相同模型类 - 这是太多的重复。
基本上我发现 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
谢谢!如果我的解释不清楚,请告诉我。