Я пытаюсь добавить объект в коллекцию в моем представлении клиента и сохранить его на сервере с помощью механизма hibernate / jpa.
Вот проблема:
Возьмите объект Group, который может содержать объекты Account.
В моем представлении клиента (gwt) я создаю новую группу (поэтому идентификатор равен нулю) и добавляю в эту группу несколько учетных записей (где существуют идентификаторы). НО эти учетные записи инициализируются в клиенте с их идентификатором и псевдо только через окно подсказки (потому что я не хочу загружать пароль и другие вещи в моем представлении клиента)
Когда моя группа возвращается на сервер, я пытаюсь сохранить ее с моим дао, и у меня появляется эта ошибка:
Свойство not-null ссылается на нулевое или временное значение
Вот моя ассоциация в объекте Group:
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH })
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public Set<Account> getAccounts()
{
return accounts;
}
поэтому сохранение должно быть выполнено автоматически. Но я думаю, что проблема в том, что я использую частичные объекты учетной записи с существующим идентификатором.
Мой вопрос: как я могу добавить простую ассоциацию (просто добавить запись в таблицу manyToMany), не загружая все объекты, которые я хочу добавить (потому что мне это не нужно, я просто хочу добавить ассоциацию между два идентификатора)
EDIT:
больше информации на примере:
У меня есть группа, свойства которой
ID: "G1"
имя: "group1"
У меня есть аккаунт, свойства которого
ID: "A1"
Псевдо: "Jerome"
пароль: "pass1"
Статус: «включено»
день рождения: «хххх»
...
Из моего клиентского интерфейса (сделано с gwt) я загружаю объект group1
Из автозаполнения я загружаю объекты Account, но только с полем id и псевдо (я не хочу загружать весь объект)
Я добавляю объект Account "Jerome" с идентификатором "A1" в мою группу.
Я отправляю свою группу на сервер, чтобы сохранить ее.
На сервере я использую транзакционный метод, который сохраняет группу, вызывая:
groupDAO.update (myGroup1)
Поскольку мой объект Account в этом объекте Group частично загружен, это вызывает ошибку.
Итак, как я могу добавить связь между моей группой и учетной записью, не загружая весь объект Account? Я не хочу такой код:
List newList = new ArrayList();
for (Account acc : myGroup1.getAccounts())
{
Account accLoaded = accountDAO.findById(acc.getId());
newList.add(accLoaded);
}
myGroup1.setAccounts(newList);
groupDAO.save(myGroup1);
спасибо