Как сохранить одно поле как строку в одной коллекции и как объект в другой коллекции
Мне нужно сохранить объект в mongoDB с двумя конвертерами.
class Comment {
User user; //Store it into the database as a String userName;
String commentText;
//getters, setters
}
class User {
String userName;
// other fields.
// getters, setters
}
Это то, что мне нужно.Коллекция комментарий
{
"_id" : "someValidObjectId_1",
"commentText" : "ABC",
// Plain String, not n object.
"user" : "user1"
},
{
"_id" : "someValidObjectId_2",
"commentText" : "EFG",
"user" : "user2"
}
Коллекция пользователь
{
"_id" : "serId_1",
"userName" : "user1",
// other fields
},
{
"_id" : "serId_2",
"userName" : "user2",
// other fields
}
Для этого я использую Spring Converter.
import org.springframework.core.convert.converter.Converter;
// instruct Mongo to store User as plain string instead of nested object
public final static class UserWriteConverter implements Converter<User, String> {
@Override
public String convert(final User user) {
return user.getUserName();
}
}
public static final class UserReadConverter implements Converter<String, User> {
@Override
public User convert(final String userString) {
// Creates an new Object with all fields empty, except userName.
return User.of(userString);
}
}
Теперь моя проблема
Как сохранить пользователя со всеми полями в коллекции user и в виде строки вполевой пользователь Комментарий .
Обратите внимание, я не могу изменить
class Comment {
// The type must be user!!!
User user
}
Мои идеи решить эту проблему
Используйте другой класс, например
class Comment {
UserName user;
}
Then add a converter to convert **UserName** into a String for **comment**.
Также я читаю ConditionalGenericConverter
Иногда требуется, чтобы преобразователь выполнялся только в том случае, если определенное условие выполняется.Например, вы можете захотеть выполнить конвертер только в том случае, если в целевом поле присутствует конкретная аннотация.Или вы можете захотеть выполнить Converter только в том случае, если в целевом классе определен определенный метод, такой как static valueOf.ConditionalGenericConverter - это подинтерфейс GenericConverter, который позволяет вам определять такие пользовательские критерии соответствия