浏览 7627 次
锁定老帖子 主题:请教:关于缓存对象的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2003-12-15
在hibernate文档中,这部分尤其少。而在hbm中设置的<jcs-cache usage="read-write"/>也只能在method和process级别缓存对象,当另一个进程访问的时候还是要不断的重复访问数据库。 2。在单机情况下,potian的推荐是使用jcs,在集群环境下使用swarmcache,但是在hibernate英文论坛上讨论过jcs有比较明显的问题,Gavin推荐不使用jcs。我想在单机情况下使用swarmcache,hibernate 2.05以后的版本也内置了swarmcache的支持,不过我很少见到如何使用的资料,哪位高手指点一下。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2003-12-15
http://douleimi.vicp.net//space/2003-11-04#关于Hibernate的Cache问题
|
|
返回顶楼 | |
发表时间:2003-12-17
配置:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="com.jaqsoft.demo.Book" table="book" proxy="com.jaqsoft.demo.Book"> <cache usage="read-write"/> <id name="bookId" type="java.lang.Long" column="bookid" unsaved-value="0"> <generator class="identity"/> </id> <property name="bookName" column="bookName"/> <many-to-one name="bookStore" class="com.jaqsoft.demo.BookStore" column="bookstoreid" not-null="true"/> <set name="readers" table="book_reader" lazy="true"> <cache usage="read-write"/> <key column="bookId"/> <many-to-many column="readerid" outer-join="auto" class="com.jaqsoft.demo.Reader" /> </set> </class> </hibernate-mapping> <!-- parsed in 0ms --> 验证缓存生效: 在hibernate.cfg.xml设置: <property name="show_sql">true</property> 写一个读取数据的页面,同时观察控制台,发现当页面第一次load的时候, 有很多类似于Hibernate: select bookstore0_.bookstoreid as bookstor1_, bookstore0_.bookstoreName as bookstor2_ from bookstore bookstore0_之类的出现,说明页面通过数据库取得数据。 多次刷新页面,发现此类打印语句消失,说明页面从缓存中取得数据。 清除缓存 ThreadLocalSession.getSessionFactory();.evict(Book.class);; 执行之后,页面load时,再次出现hibernate 的sql打印语句,说明缓存清空,程序只能读取数据库获取数据。 |
|
返回顶楼 | |
发表时间:2003-12-18
我在.hbm.xml文件中配了<cache usage="read-write"/> ,在hibernate.properties中配了hibernate.show_sql true.
我的程序是这样的: PersonBean pb =new PersonBean(); Iterator it =pb.getSomePerson("张"); Person p=(Person) it.next(); System.out.println("person:"+p.getName()); it =pb.getSomePerson("张"); Person p1=(Person) it.next(); System.out.println("person:"+p1.getName()); 出来的效果是: Hibernate: select person0_.id as x0_0_ from Person person0_ where (person0_.name like ? ) Hibernate: select person0_.id as id, person0_.name as name, person0_.address as address from Person person0_ where person0_.id=? Hibernate: select person0_.id as id, person0_.name as name, person0_.address as address from Person person0_ where person0_.id=? person:张三 Hibernate: select person0_.id as x0_0_ from Person person0_ where (person0_.name like ? ) Hibernate: select person0_.id as id, person0_.name as name, person0_.address as address from Person person0_ where person0_.id=? Hibernate: select person0_.id as id, person0_.name as name, person0_.address as address from Person person0_ where person0_.id=? person:张三 按理说第二个SQL语句是不应该出来了,说明cache没有起到作用. 这个问题要怎么解决? |
|
返回顶楼 | |
发表时间:2003-12-18
hibernate还提示了这样的错误:
严重: Error parsing XML: XML InputStream(12) org.xml.sax.SAXParseException: Element type "cache" must be declared. 应该是配置问题,谁能帮我解决一下吗?谢了先! |
|
返回顶楼 | |
发表时间:2003-12-18
把整个hbm贴出来
|
|
返回顶楼 | |
发表时间:2003-12-18
Failed to init mem cache, using: LRUMemoryCache
java.lang.ClassNotFoundException: org/apache/jcs/engine/memory/lru/LRUMemoryCache 我的jcs.jar明明包进去了(jcs.jar包有这个类org/apache/jcs/engine/memory/lru/LRUMemoryCache ),为什么还会这样. </class> <class name="h.Person"> <jcs-cache usage="read-only"/> <id name = "id" unsaved-value = "null"> <generator class="uuid.hex"/> </id> <property name="name"/> <property name="address"/> </class> |
|
返回顶楼 | |
发表时间:2003-12-18
<jcs-cache ...>
我不知道是不是版本的差异,hibernate2.1 reference中已经不是这样写的了。 而是这样写: <cache usage....> 至于使用哪种缓存,是在hibernate.cfg.xml中的。 <property name="cache.provider_class">net.sf.hibernate.cache.OSCacheProvider</property> 来体现。 |
|
返回顶楼 | |