Hibernate, EHCache, Read-Write кеш, добавление элемента в список - PullRequest
2 голосов
/ 13 марта 2010

У меня есть сущность, в которой есть коллекция. Коллекция представляет собой однонаправленное хранилище отношений OneToMany, которые просматривали определенный файл. У меня проблема в том, что после загрузки сущности и попытки обновить коллекцию я не получаю никаких ошибок, но коллекция никогда не обновляется:

Организация:

@OneToMany(cascade = CascadeType.PERSIST)
@JoinTable
protected List<User> users;

Файловый сервлет

@In
private EntityQuery<File> File_findById;

...

File file = File_findById(fileId);
file.getUsers().add(user);
session.update(file);

Несмотря на то, что я звоню session.update(file) и вижу записи в журналах гибернации, я не вижу ничего в базе данных, указывающей, что она была сохранена.

Walter

Ответы [ 2 ]

1 голос
/ 14 марта 2010

Почему вы каскадируете операцию сохранения (создания), только если вы также хотите каскадно объединить / обновить?

С аннотациями EJB3 / JPA вы можете добавить еще один каскадный тип:

  • CascadeType.MERGE

Иличётный:

  • CascadeType.ALL (который также охватывает определенные операции Hibernate, такие как сохранение-обновление, блокировка)

Если вы хотите использовать расширения Hibernate, вы можете использовать@Cascade аннотация к каскаду:

  • SAVE_UPDATE
1 голос
/ 13 марта 2010

Используйте доступ к свойству вместо доступа к полю, поскольку он включает Автоматическую проверку грязи с помощью Hibernate и использование @Cascade (CascadeType.SAVE_UPDATE) вместо

@OneToMany
@JoinTable
@Cascade(CascadeType.SAVE_UPDATE)
public List<User> getUsers() {
    return this.users;
}

С уважением,

...