我有以下课程
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:my-ctx.xml"})
public class UserTests {
@Inject
private ApplicationContext applicationContext;
private UserRepository getUserRepository() {
return (UserRepository)applicationContext.getBean("userRepository", CrudRepository.class);
}
@Test
public void someTest() {
User user = new User();
user.setName("John Doe");
getUserRepository().save(user);
}
}
运行测试,我收到以下错误
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException
...
根本原因是
org.datanucleus.api.jpa.metamodel.SingularAttributeImpl.isVersion(SingularAttributeImpl.java:79)
org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.findVersionAttribute(JpaMetamodelEntityInformation.java:92)
org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:78)
org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:65)
org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:146)
org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:84)
org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:67)
...
其中VersionMetaData vermd = mmd.getAbstractClassMetaData().getVersionMetaData();
为空。
这是一个错误吗?
我知道我可以使用类似@Inject UserRepository userRepository;
的内容,但考虑到Spring Data的工作原理,这两个应该有相同的结果,对吧?无论如何,结果将是同样的错误。
我正在使用Spring数据1.4.1,DataNucleus 3.3.2,Spring 3.2.4。
答案 0 :(得分:3)
实际上这是一个DataNucleus错误,我填写了一个错误报告(包括测试和修复补丁):http://www.datanucleus.org/servlet/jira/browse/NUCJPA-250。
我的解决方法是切换回Spring Data 1.3.0。