我有以下情况:
// several classes that implement different interfaces
class A implements X,Y {}
class B implements Y,Z {}
class C implements X,Z {}
// other classes that contain collections of one of the interfaces(different objects)
class G {
Collection<X> mayContainAC;
}
class H {
Collection<Y> mayContainAB;
}
class I {
Collection<Z> mayContainBC;
}
如何使用JPA继续保存?
从我看到的情况来看,JPA不支持接口集合。是对的吗? JDO确实支持它,但我很难让JDO与我的Wicket应用程序很好地配合。
谢谢,汤姆
答案 0 :(得分:2)
如何使用JPA继续保存?
不支持。
从我看到的情况来看,JPA不支持接口集合。是对的吗?
如果接口有一个持久性实现者,那么您可以使用targetEntity
定义它。
如果界面有多个实施者,则标准JPA不支持。
答案 1 :(得分:0)
JDO支持它
是的JDO确实支持持久性接口,我们自2007年以来一直在我们的所有设计中使用它们,因为你知道,在Java编程中使用接口就像面向对象的建模1.0.1。如果您的ORM不支持它们,那么您所谓的“透明持久性”解决方案实际上并不是非常透明。
这个以及其他一些缺点意味着我们已经避开了最受欢迎的JPA实现,最终使用的ORM稍微不那么受欢迎,但在面向对象建模方面更强大,效率更高。我们使用DataNucleus / JDO,其中持久性接口完美运行。没有这种支持,我无法想象构建OO模型。
我不确定最流行的JPA实现固有的架构限制是什么,它不支持持久接口。
除了实现JDO标准外,DataNucleus还实现了JPA标准。 DataNucleus / JPA有可能支持持久性接口,但我只使用过DataOucleus和JDO,所以我不确定。
但是我很难让JDO与我的Wicket应用很好地配合。
我们有一个大规模(400多个持久类)Web应用程序/云平台,使用JDO和(最优秀的)Wicket java UI框架部署并且从未出现过问题。我们已经创建了几个与Wicket的模型绑定体系结构一起使用的JDO特定IModel实现。如果您想使用它们,请告诉我们,我们可以开源它们。