如何在JPA?</interface>中保留接口的Collection <interface>的集合

时间:2010-10-03 21:13:15

标签: collections jpa interface persistence

我有以下情况:

// 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应用程序很好地配合。

谢谢,汤姆

2 个答案:

答案 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实现。如果您想使用它们,请告诉我们,我们可以开源它们。