Staram się utrzymywać następujący obiekt z spring-data-mongodb
wersji 1.1.1.RELEASE
:PersistenceConstructor Argument nazwa zmiennej nie pasuje instancji nazwę zmiennej
@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;
}
}
ja dostać MappingException
gdy próbuję odczytać obiekt z powrotem z bazy danych (zobacz pełny opis stosu poniżej)
Konwencja nazewnictwa, której używa moja grupa, wymaga podania nazw zmiennych argumentów przed prefiksem a_
i nazw zmiennych instancji, które mają być poprzedzone przez m_
. Wygląda na to, że spring-data-mongodb
przyjmuje założenie, że nazwy zmiennych argumentów konstruktora muszą być zgodne z nazwami instancji obiektu.
- Dlaczego nie
spring-data-mongodb
użyć argumentu konstruktora instancji zmiennej mapowania że zdefiniowania w konstruktorze? - Czy istnieje inny sposób zdefiniowania tego odwzorowania w taki sposób, aby
spring-data-mongodb
poprawnie zbudował mój obiekt, czy też jest to moja jedyna opcja złamania konwencji nazewnictwa?
.
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)
To naprawdę marna konwencja nazewnictwa, która nie ma żadnego sensu. –