簡體   English   中英

Hibernate session.load()無法與Java反射getDeclaredFields一起使用?

[英]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的實際FieldHazardSubmission.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM