2011-05-26 97 views
0

在session.delete之后,高速缓存中实体上的集合不刷新。二级高速缓存和session.save

这是我的关系:
- 模型可以有0到N个用于特定用户的书签。
- 模型的primaky键是一个id
- 书签的主键是对(idModele,loginUser)

的问题是,如果我保存的模型1与一个书签。他们被放在二级缓存中。如果我在一个事务中使用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,spring core,tx ... 3.0。

在此先感谢您的帮助。

回答

2

会话是第一级缓存,而不是第二级缓存。

没有关于您的配置和错误的更多信息,很难提供更多帮助。

+0

我使用Hibernate Core 3.6.3.Final&Ehcache 2.2.0 – 2011-05-26 21:10:43