hibernate的JPA实现中,即使Book对象设置了缓存,每次
用em.find(Book.class,id)返回的对象都不同呢?Book book1 = em.find(Book.class,123L);
Book book2 = em.find(Book.class,123L);虽然book1和book2内容一致,但book1==book2和book1.equals(book2)都返回false为何???
用em.find(Book.class,id)返回的对象都不同呢?Book book1 = em.find(Book.class,123L);
Book book2 = em.find(Book.class,123L);虽然book1和book2内容一致,但book1==book2和book1.equals(book2)都返回false为何???
解决方案 »
- JDBC操作mysql。得到一个结果集,如何定位到这个结果集的某一行?
- fckeditor使用的相关问题
- hibernate多对一查询问题.请教高手
- JSP里如何实现文章阅读次数的统计?
- jsp中获取spring中的bean对象出现异常
- 请问有中文的 LDAP 客户端么?
- 求助,关于log4j.properties
- JBOSS中数据库连接池抛出的异常问题?
- jboss启动报Failed to find factory for event: javax.management.Notification,是什么原因?
- CMP中怎样处理自动增长的主键?
- java ee连接数据库是不是要下个包,是不是jdbc包
- 求助:J2EE零基础学习,谁能推荐下(小弟只有100分啦,不好意思)
直接用myeclipse生成!
jpa查询的机制你应该清楚,先去缓存找,缓存无才去数据库找。
这样,缓存中存在(此时无其他人操作数据库),你拿出来,你也说了,内容一样。
如果你认为==为false,就是“新”,那你应该自己将hashcode和equals方法重写。
我的意思是说,没必要每次都返回一个新对象呀,直接返回缓存的对象本身不行么?
感觉每次都是返回的book.clone()
如果直接返回的就是原来那个对象,那==肯定自然就是true了呀。
比如有100次em.find且不是要生成100个内容相同的对象,多占内存呀?
如果缓存中没有指定的实体,EntityManager会创建一个新的实体,但是不会立即访问数据库来加载持久状态,而是在第一次访问某个属性的时候才加载。
Book book1 = em.find(Book.class,123L);
Book book2 = em.find(Book.class,123L);
每次查询hibernate应该都会产生新的对象,建议重写hashCode()和equals()方法!
你顺便也试试hibernate的find,load等。
你顺便也试试hibernate的find,load等。