2015-01-02 65 views
0

基本上,是可能的内部类作为休眠组件

文档说

A组分是持久化为值类型,而不是一个实体引用包含的对象。

与值类型相似,组件不支持共享引用。换句话说,两个人可以具有相同的名称,但是两个人物对象将包含两个独立的名称对象,这些名称对象的值仅为“相同”。

值类型的主要特征是它们没有定义自己的生命周期。我们说他们是由其他人(特别是一个实体,我们将在后面看到)“拥有”,它定义了它们的生命周期。

非静态的内部类可以很好地适应这一点,但我从来没有见过在实践中的例子。使用内部类作为组件有什么限制吗?

回答

1

经过一番研究,我发现,答案是没有,这是不可能的

其原因很简单,(在我的理解)只与Hibernate工具本身,不与任何架构问题连接。 Hibernate需要组件类具有默认的无参数构造函数,并且无法实例化内部类(虽然它接受映射成功)。我希望这个特性在未来的Hibernate版本中得到支持。

2

JPA规范说:

嵌入类必须坚持在与嵌入类不标注为实体的例外重刑实体2.1节规定的要求。

和2.1节说:

实体类必须是顶级类。

+0

它似乎是hibernate忽略JPA关于嵌入式的推荐 –

0

您必须将内部组件类标记为static

+0

我试过用静态内部类(组件/嵌入式)并且不工作 – joseaio