【发布时间】:2012-12-12 03:11:18
【问题描述】:
我正在尝试使用spring-data-mongodb 版本1.1.1.RELEASE 保留以下对象:
@Document
public static class TestObject {
private final int m_property;
@PersistenceConstructor
public TestObject(int a_property) {
m_property = a_property;
}
public int property() {
return m_property;
}
}
当我尝试从数据库中读回对象时,我得到一个MappingException(请参阅下面的完整堆栈跟踪)
我的小组使用的命名约定要求参数变量名称以a_ 开头,实例变量名称以m_ 开头。似乎spring-data-mongodb 假设构造函数参数变量名称必须与对象实例变量名称匹配。
- 为什么
spring-data-mongodb不使用我在构造函数中定义的实例变量映射的构造函数参数? - 是否有另一种方法来定义此映射,以便
spring-data-mongodb正确构造我的对象,或者是我唯一的选择来打破命名约定?
.
Exception in thread "main" org.springframework.data.mapping.model.MappingException: No property a_property found on entity class com.recorder.TestRecorder$TestObject to bind constructor parameter to!
at org.springframework.data.mapping.model.PersistentEntityParameterValueProvider.getParameterValue(PersistentEntityParameterValueProvider.java:90)
at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:70)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:229)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:209)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:173)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:169)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:72)
at org.springframework.data.mongodb.core.MongoTemplate$ReadDbObjectCallback.doWith(MongoTemplate.java:1820)
at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:1542)
at org.springframework.data.mongodb.core.MongoTemplate.findAll(MongoTemplate.java:1064)
at com.recorder.TestRecorder.main(TestRecorder.java:43)
【问题讨论】:
-
这真是蹩脚的命名约定,没有任何意义。
标签: java naming-conventions spring-data mongodb-java spring-data-mongodb