я получил два Entities:@Reference Объект запроса в морфий, используя MongoDB
public class UserAccount extends BaseEntity {
@Expose
@Property("username")
@Indexed(value = IndexDirection.ASC, name = "userNameIndex", unique = true)
private String userName = new String();
@Expose
@Property("password")
private String password = new String();
}
и
public class UserProfile extends BaseEntity {
@Expose
@Property("first name")
@Indexed(value = IndexDirection.ASC, name = "firstNameIndex")
private String firstName = new String();
@Expose
@Property("middle name")
// @Indexed(value = IndexDirection.ASC, name = "middleNameIndex")
private String middleName = new String();
@Expose
@Property("last name")
@Indexed(value = IndexDirection.ASC, name = "lastNameIndex")
private String lastName = new String();
@Expose
@Reference(/* idOnly = true, */value = "user id" /* , lazy = true */)
private UserAccount userAccount = new UserAccount();
}
Я пытаюсь найти все пользователи на основе искали UserName (содержит, но уникальный!) И UsedProfileObjectId (@Я бы). Я пытаюсь ограничить проверку при сохранении userdetails, если предоставленное имя пользователя уникально или нет? (Мне нужно проверить это как в новых случаях добавления, так и при обновлении). Так что я попытался закодировать это:
public List<UserProfile> findAllUsersWithSameUserName(ObjectId id,
String userName) {
Datastore ds = getDatastore();
Query<UserProfile> profileQuery = ds.createQuery(UserProfile.class);
Query<UserAccount> accountQuery = ds.createQuery(UserAccount.class);
accountQuery.criteria("username").containsIgnoreCase(userName);
container.add(profileQuery.criteria("user id").in(
accountQuery.asKeyList()));
return profileQuery.asList();
}
Но этот код показывает
java.lang.NullPointerException
- Могу ли я что-то отсутствует на код?
- Также я стараюсь применять
@Reference (значение = "идентификатор пользователя", ленивый = истинный) частного учетная_запись_пользователя UserAccount = новый UserAccount();
Но, я не понял, как восстановить этот объект без данных?
Я пытался сделать это:
user = userProfileDAO.findUserByProfileID(id);
user.getUserAccount();
user.getUserAccount().getUserName();
user.getUserAccount().getPassword();
// Gson gson = new Gson();
// .setDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz").create();
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd")
.excludeFieldsWithoutExposeAnnotation().setPrettyPrinting()
.create();
response = gson.toJson(user, UserProfile.class);
Еще réponse получил EMPTY UserAccount данные:
"userAccount": {
"userName": "",
"password": "",
"isDeleted": false,
"isActive": false,
"addedOn": "2015-08-06"
},
Даже если на обследование я могу получить фактические данные, как это: user.getUserAccount().getUserName()
не удалось найти хороший пример использования lazy = true в Morphia тоже? Как я могу применить этот ленивый эффект к моему коду?
Не видя StackTrace это будет трудно сказать ... Я не совсем уверен, что ваш второй вопрос о , Что вы подразумеваете под «принудительным исполнением этого ленивого эффекта на мой код?» – evanchooly
Вы пробовали без пробела в названии? Это определенно необычный выбор. – xeraa
@evanchooly вы можете мне предложить, как я могу использовать Lazy в объекте «Ссылка» и привязать его к его родительскому объекту во время извлечения? – Milson