Collections 如何持久化接口的集合';s系列<;界面>;在JPA?

Collections 如何持久化接口的集合';s系列<;界面>;在JPA?,collections,jpa,interface,persistence,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 { C

我对以下场景有一个简单的理解:

// 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;
}
//几个实现不同接口的类
类实现X,Y{}
类B实现Y,Z{}
类C实现X,Z{}
//包含其中一个接口(不同对象)集合的其他类
G类{
收集马雅纳克;
}
H类{
收集MayContaineab;
}
第一类{
收藏于公元前5世纪;
}
我将如何使用JPA来持久化这一点

据我所见,JPA不支持接口集合。正确吗? JDO确实支持它,但我很难让JDO与我的Wicket应用程序配合得很好

谢谢,汤姆

我将如何使用JPA来持久化这一点

不支持

据我所见,JPA不支持接口集合。正确吗

如果接口只有一个持久实现器,那么可以使用
targetEntity
定义它

如果接口有多个实现者,则标准JPA不支持它

JDO确实支持它

是的,JDO确实支持持久接口,我们从2007年开始在我们的所有设计中使用它们,因为在Java编程中使用接口就像面向对象建模1.0.1。如果您的ORM不支持它们,那么您所谓的“透明持久性”解决方案实际上并不十分透明

这一点和其他一些缺点意味着我们避开了最流行的JPA实现,最终使用了ORM——在面向对象建模方面,它稍微不受欢迎,但功能更强大,效率更高。我们使用DataNucleus/JDO,其中持久接口可以完美地工作。我无法想象在没有这种支持的情况下构建OO模型

我不确定最流行的JPA实现的固有架构限制是什么,它不能支持持久接口

除了实现JDO标准之外,DataNucleus还实现了JPA标准。有可能DataNucleus/JPA确实支持持久接口,但我只在JDO中使用过DataNucleus,所以我不确定

但我很难让JDO与我的Wicket应用程序配合得很好


我们使用JDO和(最优秀的)Wicket java UI框架部署了一个大规模(400多个持久类)web应用程序/云平台,从来没有出现过问题。我们已经创建了两个特定于JDO的IModel实现,它们与Wicket的模型绑定架构一起工作。如果您想使用这些集合,请告诉我们,我们可以将它们开源。

谢谢您的确认-对于我所描述的场景,建议的解决方法是什么?@Tom您可以保留单独的集合并自己合并它们。我考虑过这一点,但我需要混合项的顺序,并且我需要随着时间的推移添加不同的类型。我想我必须使用一个抽象基类,并限制可以以其他方式进行的操作。我想知道使用Scala类和特性是否有助于解决这个问题?帕斯卡,祝贺你通过了100K的声誉评分。非常令人印象深刻。@duffymo非常感谢duffy。