Мне не удалось найти ни одной веб-страницы или другого сообщения об этой проблеме. Следовательно, я здесь размещаю.Spring MongoDB, вставляющий нежелательные объекты
В документах я хранящих к моему MongoDB, у меня есть эти вещи, показывая вверх:
"itemModifiers" : [
{
"val$implicitModifierString" : "16% increased Spell Damage",
"modifierName" : "16% increased Spell Damage"
}
]
val$implicitModifierString
на самом деле является переменной из моей Java кода, который не был установлен на экземпляр ItemModifiers.class
. В принципе, когда я устанавливаю переменную в своих классах, которые храню в MongoDb, любая переменная или объект, которые я использую для установки этой переменной, также сохраняются в базе данных (или, по крайней мере, это то, что мне кажется!).
Вот некоторые примеры кода, что этот процесс выглядит (если вы ненавидите карты, извините, не совсем уместным здесь.):
public ItemModifier deriveModifier(final String modifier) {
for (Pattern outerKey : tierMap.keySet()) {
if (outerKey.matcher(modifier).matches()) {
HashMap<Pattern, ItemModifierTier> innerMap = tierMap.get(outerKey);
for (Pattern innerKey : innerMap.keySet()) {
if (innerKey.matcher(modifier).matches()) {
Matcher innerMatcher = innerKey.matcher(modifier);
Double[] tierValues = new Double[innerMatcher.groupCount()];
innerMatcher.find();
for (int i = 1; i <= innerMatcher.groupCount(); i++) {
tierValues[i - 1] = Double.valueOf(innerMatcher.group(i));
}
return new ItemModifier() {{
setModifierName(modifier);
setModifierTerm(termMap.get(outerKey.pattern()));
setModifierTier(innerMap.get(innerKey));
setModifierType(itemModifierType);
setModifierValues(tierValues);
}};
}
}
}
}
return null;
}
А вот класс ItemModifier (намеренно индексируется каждое поле, потому что они все запрашиваемых через службу, я до сих пор не созданы сводные индексы, но планируют еще вопрос под рукой сортируется):
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"modifierName",
"modifierTerm",
"modifierType",
"modifierTier",
"modifierValues",
"modifierAverage"
})
public class ItemModifier {
@Indexed
@JsonProperty("modifierName")
private String modifierName;
@Indexed
@JsonProperty("modifierTerm")
private String modifierTerm;
@Indexed
@JsonProperty("modifierType")
private ItemModifierType modifierType;
@Indexed
@JsonProperty("modifierTier")
private ItemModifierTier modifierTier;
@Indexed
@JsonProperty("modifierValues")
private Double[] modifierValues;
@Indexed
@JsonProperty("modifierAverage")
private Double modifierAverage;
public ItemModifier() {
}
public String getModifierName() {
return modifierName;
}
public void setModifierName(String modifierName) {
this.modifierName = modifierName;
}
//... the other getters/setters
}
Этот ItemModifiers.class
проводится в пределах ItemDocument.class
и хранится в базе данных Монго просто invokin g mongoOperations.insert(itemDocumentInstance);
.
В случае, если это имеет значение, это мой mongoConfig.xml:
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<mongo:mongo host="127.0.0.1" port="27017"/>
<mongo:db-factory dbname="public-stash-api"/>
<bean id="mappingContext"
class="org.springframework.data.mongodb.core.mapping.MongoMappingContext"/>
<bean id="defaultMongoTypeMapper"
class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
<constructor-arg name="typeKey">
<null/>
</constructor-arg>
</bean>
<bean id="mappingMongoConverter"
class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
<constructor-arg name="mappingContext" ref="mappingContext"/>
<property name="typeMapper" ref="defaultMongoTypeMapper"/>
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
<constructor-arg name="mongoConverter" ref="mappingMongoConverter"/>
</bean>
</beans>
Заранее спасибо за вашу помощь!
Существует ли какой-либо класс, имеющий карту как свойство? особенно составные объекты ItemModifier – Barath
. Переменные-члены - это Enum, Double [], Double или String. Нет карт. – Qbert