遇到这样情况..这个实体A是配了二级缓存@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
在一个有事务的方法里面查询了B实体,B是关联了A的...用B.getA()取到A,然后再A.getId().
然后把A的id传到另一个方法里面调用了A的Dao.findOne(id)...查出来的实体A不为空(A!=null)
但是用findOne查出的A里面的所有字段都为null...
把@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)去掉就正常了,
但是想不明白怎么回事,还望老司机传授经验...
去掉二级缓存,就正常 --> A 本来就在二级缓存里,且其所有字段都为 null。
所有字段全是 null --> 可能是因为懒加载的原因,load 得到的代理对象的字段除了 id,其他字段全为 null,被存进二级缓存,因为二级缓存的 key 就是实体对象的 id;或者,本来数据库里面对应的记录的全部字段都为 null;
不保证答案的正确,我极少用 load 和 二级缓存,希望答案对你有用。