是否仍然可以強制Hibernate 3.3或3.5使用CGLib而不是Javassist?在我的屬性文件中,我設置了如何強制Hibernate 3.3或3.5使用CGLib而不是Javassist?
hibernate.bytecode.provider = cglib
但是,這似乎並沒有這樣做。有什麼想法嗎?
是否仍然可以強制Hibernate 3.3或3.5使用CGLib而不是Javassist?在我的屬性文件中,我設置了如何強制Hibernate 3.3或3.5使用CGLib而不是Javassist?
hibernate.bytecode.provider = cglib
但是,這似乎並沒有這樣做。有什麼想法嗎?
似乎有些人沒有正確閱讀我的答案,所以我會換個話:你的hibernate.properties
看起來是正確的,屬性是明確的,它應該工作。所以,對於這個問題抱歉,但在類路徑上是CGlib?
更新:經過測試,它適用於我。下面是輸出我在初始化時得到:
15 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.3.0.SP1 18 [main] INFO org.hibernate.cfg.Environment - loaded properties from resource hibernate.properties: {hibernate.bytecode.use_reflection_optimizer=false, hibernate.bytecode.provider=cglib} 20 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : cglib
PS:需要注意的是CGLIB support has been deprecated最近(這並不意味着你將無法使用CGLIB但它的集成不再維持)。
我不知道它是如何在你的環境中工作的(也許你正在運行與JBoss打包在一起的Hibernate?),但是Hibernate需要一個系統屬性或類創建時的classpath中的hibernate.properties(stupid!)來捕獲字節碼供應商設置。所以在classpath中加入'cglib'不是問題的根源。 3.3.1和3.3.2都不能「在盒子外面」工作。 – 2010-09-24 17:17:43
@dma_k再次閱讀問題,OP **在類路徑中有一個'hibernate.properties'文件(*「在我的屬性文件中,我設置了」*),所以這部分隱含在我的答案(* 「而且你的財產是明確的」*)。也許**你**誤解了我和我說的話,在這種情況下,我請你重新考慮你的投票。我從來沒有說屬性文件不需要。 – 2010-09-24 17:21:37
@dma_k日誌跟蹤甚至說明我有一個'hibernate.properties'。你完全誤解我說的話。 – 2010-09-24 17:25:31
呀,也把
hibernate.properties
到一些源文件夾,記得有hibermate-CGLIB的重新包裝的依賴關係:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-cglib-repack</artifactId>
<version>2.1_3</version>
</dependency>
從Hibernate 3.3.2開始,不需要重新打包的cglib版本。而且,至少在3.2.x中,需要特別指定'-Dhibernate.bytecode.provider = cglib'系統屬性或創建一個定義了相同屬性的類路徑範圍'hibernate.properties'。 – 2010-09-24 17:13:48
是CGLIB庫不是爲大約4年開發記住。但是,您應該盡一切努力使您的代碼與仍處於積極維護狀態的Javassist協同工作。
這引發了問題....爲什麼?這是內部休眠的東西。 – skaffman 2010-02-24 23:13:28