Кэш 2-го уровня и session.save - PullRequest
0 голосов
/ 26 мая 2011

Коллекция объекта в кэше не обновляется после сеанса. Удалить.

Вот мое отношение:
- модель может иметь от 0 до N закладок, используемых для конкретного пользователя.
- первичным ключом модели является id
- первичным ключом закладки является пара (idModele, loginUser)

Проблема в том, что если я сохраню модель 1 с одной закладкой. Они помещаются в кэш 2-го уровня. Если для удаления этой закладки я использую bookmarkDao.delete в одной транзакции, она все еще находится в modele.getBookmarks () даже в новой транзакции. Кеш, похоже, не обновился.

Вот мои файлы hbm:
Модель

 <class name="Modele" table="modele"  batch-size="10">
<cache usage="read-write"/>
 <id name="id" column="id_composant" unsaved-value="0">
  <generator class="sequence">
    <param name="sequence">composant_id_composant_seq</param>
  </generator>
</id>

<set name="bookmarks" table="bookmark" cascade="all" access="field" >
  <cache usage="read-write"/>
  <key column="id_modele" />
  <element column="username" type="string"/>
</set>

Закладка

 <class name="Bookmark" table="bookmark">  
 <cache usage="read-write"/>
<composite-id>
  <key-many-to-one name="modele" column="id_modele" access="field" />
  <key-property name="username" column="username"/>
</composite-id>
</class>

Занятия

public class Bookmark implements Serializable {
private static final long serialVersionUID = 1L;

private Modele modele;
private String username;

public Modele getModele() {
    return modele;
}
public void setModele(Modele modele) {
    this.modele = modele;
}

public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
@Override
public int hashCode() {

    final int prime = 31;
    int result = 1;
    result = prime * result + ((modele == null) ? 0 : modele.hashCode());
    result = prime * result + ((username == null) ? 0 : username.hashCode());
    return result;
}
@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Favori other = (Favori) obj;
    if (modele == null) {
        if (other.modele != null)
            return false;
    } else if (!modele.equals(other.modele))
        return false;
    if (username == null) {
        if (other.username != null)
            return false;
    } else if (!username.equals(other.username))
        return false;
    return true;
}

}

Мне что-то не хватает?

Я использую Hibernate Core 3.6.3.Final & Ehcache 2.2.0 с Maven, пружинное ядро, tx ... 3.0.

Заранее спасибо за помощь.

1 Ответ

2 голосов
/ 26 мая 2011

Сессия - это кэш первого уровня, а не кэш второго уровня.

Без дополнительной информации о вашей конфигурации и получаемой ошибке трудно помочь больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...