[问题] spring data 问题

楼主: cyclone350 (老子我最神)   2014-08-15 19:15:55
spring data jpa 问题
大家好,在开发程式时遇到一个问题...
说实在的这问题我认为非常奇妙...
我在实作时有用到 java reflection,今天在 debug发现一个奇妙现象...
其中我有一个 API 是这样使用
EntityUtil.getIdValue(Object entity)
这方法会取得到传入 entity 的 id 值
此方法是检查 class 的 annotation 来取值
今天有一个页面出现错误
经过检查,是查不到entity annotation,
我是透过此方式呼叫的
for(Object o : catalogDao.findAll()) {
try {
map.put(EntityUtil.getIdValue(o), "defaultValue");
} catch(Exception e) {
log.info("no id value:" + o);
}
}
透过 eclipse 检查发现很神奇的现象
http://i.imgur.com/3EOYiGo.png
我的 class 名称被改掉了... 名称后面被加上 _$$_jv...
另外可看到 "catalogName" 及 "pid" 都是 null
但是下面显示(toString)出的讯息却是有值...???
有看到 handler...是lazyInitatial 但是 jpa 的 finaAll() 为啥会是 lazy...
更神奇的是,我检查其他页面所有的 jpa findAll 都是正常的,
就唯一在某个 table 的某一个值出现...
此例为 Catalog
Catalog 是跟 Product 关系为一对多
比较可靠的猜测是当我读取 Product 时有
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "cid")
private Catalog catalog;
所以被设定到了...? (不过其他更复杂关系的table都没有出现此问题,catalog是唯一
出问题的)
可是看了 java doc,并没有说明 findAll() 这个 function 会有 lazy 的情况...
请问是我哪边观念错了吗?
或是有哪个点可以切入去 debug ?
楼主: cyclone350 (老子我最神)   2014-08-15 19:32:00
问题应该等同于http://ppt.cc/Qr7S以解决,这是Hibernate __的机制,若要用reflection可以用 Hibernate.getClass 之类的方法取得real Object instance

Links booklink

Contact Us: admin [ a t ] ucptt.com