[問題] 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