尝试在Eclipse的上下文中运行任何东西时,我突然收到此错误:
Caused by: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
我知道这是使用的旧JPA 1.0规范,而我的项目使用JPA 2.0。我可以通过Maven和IDEA运行我的单元/集成测试没有问题,但是如果我在Eclipse中运行它们(尝试过Kepler和Luna)我就会收到错误。
进行一些挖掘我发现通过ProjectClassLoader注入了较旧的库:
ProjectClassLoader: entry= $HOME/.m2/repository/javax/persistence/persistence-api/1.0.2/persistence-api-1.0.2.jar
但是它没有出现在我的Maven依赖项或传递依赖项中。这不是我第一次看到这个。我最后一次删除我的项目并重新创建它,但这次方法失败了。我也试过禁用JPA Facet。
我该如何解决这个问题?
答案 0 :(得分:1)
有两个地方可以看。两者都属于项目属性。
首先,如果您的项目使用方面,请查看该部分。三个将是JPA列出的一个方面。应该检查它,右下角应该是2.0(或2.1)。
接下来还有一个JPA标签。它下面有几个选项卡,但主要是设置JPA版本并指定实现。这可能是你在1.0罐子里拉的。
如果您打开了刻面,请确保两个位置一致。你可以很容易地让它们不同步,弄清楚它是令人困惑和恼人的。
答案 1 :(得分:0)
我终于能够“解决”这个问题 - 至少让自己重新开始工作。这是我做的:
奇迹般地,JPA 1.0不再包含在项目中了。 @Terry有一些很好的信息,但我的配置根据他的笔记显得正确。我认为这只是一个解决方法,并且Eclipse Luna中可能存在潜在的错误。