У меня есть две сущности:
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();
}
Я пытаюсь найти всех пользователей на основе искомого имени пользователя (содержит!, но уникально) и UsedProfileObjectId (@Id). Я пытаюсь проверить ограничение при сохранении сведений о пользователе, является ли предоставленное имя пользователя уникальным или нет? (Мне нужно проверить это как в новых случаях добавления, так и в случаях обновления). Итак, я попытался закодировать это:
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(value = "идентификатор пользователя", lazy = true) private UserAccount userAccount = new 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);
Тем не менее, ответ получил EMPTY данные учетной записи пользователя:
"userAccount": {
"userName": "",
"password": "",
"isDeleted": false,
"isActive": false,
"addedOn": "2015-08-06"
},
Хотя при проверке я могу получить такие фактические данные: user.getUserAccount().getUserName()
Не удалось найти хороший пример использования lazy=true и в Morphia? Как я могу применить этот ленивый эффект к моему коду?