[問題] spring data 問題

看板java作者 (老子我最神)時間9年前 (2014/08/15 19:15), 編輯推噓0(004)
留言4則, 1人參與, 最新討論串1/1
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 ? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.218.64.133 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1408101358.A.0B4.html

08/15 19:32, , 1F
問題應該等同於http://ppt.cc/Qr7S
08/15 19:32, 1F

08/15 21:16, , 2F
以解決,這是Hibernate __的機制,若要用reflection
08/15 21:16, 2F

08/15 21:17, , 3F
可以用 Hibernate.getClass 之類的方法取得
08/15 21:17, 3F

08/15 21:17, , 4F
real Object instance
08/15 21:17, 4F
文章代碼(AID): #1JxUlk2q (java)