【发布时间】:2011-05-15 07:09:21
【问题描述】:
我目前正在进行系统迁移(从带有 JPA1 的 hibernate 3.2.2.GA 到带有 JPA2 的休眠 3.6。迁移本身非常简单,没有大的更新要做(其实我没有认为有任何)。
我面临的问题是hibernate在运行时抛出异常,抱怨@Any注释。堆栈跟踪如下:
Caused by: java.lang.UnsupportedOperationException: any not supported yet
at org.hibernate.ejb.metamodel.AttributeFactory.determineAttributeMetadata(AttributeFactory.java:452)
at org.hibernate.ejb.metamodel.AttributeFactory.buildAttribute(AttributeFactory.java:93)
at org.hibernate.ejb.metamodel.MetadataContext.wrapUp(MetadataContext.java:183)
at org.hibernate.ejb.metamodel.MetamodelImpl.buildMetamodel(MetamodelImpl.java:66)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:902)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:225)
所以这意味着休眠不再支持@Any 或@ManyToAny。这很奇怪,因为文档(从 3.3 到 3.6)提到了如何使用 @Any 注释,而 AFAIK 没有休眠版本会贬低这个注释。
我检查了hibernate 3.5源代码,@Any注解检查也在那里,所以它也抛出了同样的异常。
你们有解决这个问题的办法吗?
非常感谢!
【问题讨论】:
-
仅当您使用 JPA 接口时才支持它们。使用
SessionFactory他们可以正常工作。 -
这很奇怪......它适用于带有 jpa1 的休眠 3.2。去搞清楚。我现在会坚持使用 3.2 =/
-
这很清楚。 JPA2 包括元模型支持。由于不清楚如何在元模型中表示
@Any属性,因此他们必须禁止此类属性(可以从堆栈跟踪中推断出来)。 -
你知道JPA2中@Any的相对注释是什么吗?
标签: java hibernate jpa hibernate-mapping