[英]Hibernate session.load() not working with Java reflection getDeclaredFields?
我正在運行一個遍歷聲明字段的函數,查找對象的2個實例之間的差異並將其輸出(用於審計跟蹤)。 但是,如果我使用從休眠會話中加載的對象,則IE:
HazardSubmission hs = (HazardSubmission)s.load(HazardSubmission.class, id);
該對象的聲明字段來自:default_interceptor,handler,_filter,methods,如果我在不使用session.load的情況下加載相同類型的對象,它將發現ACTUAL聲明字段很好。 如果在此hs對象上運行getClass()。toString(),它將返回:
class nz.co.g.hs.stripes.model.HazardSubmission_$$_javassist_1
據我所知,javaasssist_1的問題出在哪里,由於某種原因,它沒有找到實際的類。
知道我能做什么嗎?
session.load(HazardSubmission.class, 1)
將首先檢查在當前session中是否可以找到ID為1的HazardSubmission.class
類型的實例。 如果是,則返回該實例。 否則,將返回代理。
代理是通過對HazardSubmission.class
進行子類化而動態創建的,它們不是HazardSubmission.class
,這就是為什么返回實例上的getDeclaredFields()
不是HazardSubmission.class
的實際Field
的HazardSubmission.class
要從生成的代理實例獲取實際的Class
,可以使用Hibernate.getClass()
HazardSubmission hs = (HazardSubmission)s.load(HazardSubmission.class, id);
System.out.println(Hibernate.getClass(hs).toString());
for (Field field : Hibernate.getClass(hs).getDeclaredFields()) {
System.out.println(field .toString());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.