【发布时间】:2014-11-09 19:54:32
【问题描述】:
我们正在尝试在我们的项目中使用 orientdb 1.7.8,但遇到了以下异常:
Caused by: java.lang.UnsupportedOperationException: getProviderUtil
at com.orientechnologies.orient.object.jpa.OJPAPersistenceProvider.getProviderUtil(OJPAPersistenceProvider.java:80)
at javax.persistence.Persistence$1.isLoaded(Persistence.java:78)
at org.apache.bval.jsr303.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:34)
at org.apache.bval.jsr303.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:60)
at org.apache.bval.jsr303.resolver.CachingTraversableResolver.isReachable(CachingTraversableResolver.java:82)
at org.apache.bval.jsr303.ConstraintValidation.isReachable(ConstraintValidation.java:241)
... 158 more
这是因为我们在项目中使用了 jsr-303 验证(目前实际上是非 jpa)。验证库扫描 JPA 持久管理器,Orientdb 在其 orient-object jar 中提供了该管理器。我们将来也想使用 orientdb 的对象框架,所以排除它不是一个选项。
OrientDB 的 JPA PersistentceProvider 实现似乎不完整:
public class OJPAPersistenceProvider implements PersistenceProvider {
.... implemented all other methods ...
@Override
public ProviderUtil getProviderUtil() {
throw new UnsupportedOperationException("getProviderUtil");
}
现在验证 jar 会自动选择这个类,因为 orientdb-object jar 在 META-INFO/services 中有 javax.persistence.spi.PersistenceProvider 文件。
那么,有解决方法吗?或者 orientdb 是否会支持 getProviderUtil 方法,以便它可以很好地与 jsr 303 验证配合使用?有没有办法让验证器忽略这个特定的 jpa 实现?
将 jsr 实现更改为使用休眠验证实现会给出 完全相同的例外。
【问题讨论】:
-
使用不是真正的 JPA 实现的东西可能会出现问题?
-
是的,orientdb jpa 实现不完整。我正在寻找解决方法。
标签: java hibernate validation jpa orientdb