![](/img/trans.png)
[英]ClassCastException on the same class deserializing from kafka stream and Avro
[英]ClassCastException from exact same class
我正在運行數據庫查詢,並嘗試將結果轉換為Customer對象,但出現錯誤:
java.lang.ClassCastException: Entities.Customer cannot be cast to Entities.Customer
我的代碼:
Customer c = (Customer)em.createNamedQuery("Customer.findByEmail")
.setParameter("email", user)
.getSingleResult();
我已經讀到這是由於類加載器引起的,但是老實說這有點麻煩。 在其他地方是否有大問題,還是我只是錯誤地投射了它?
看來您有2個ClassLoader。 您可以使用以下方法檢查類加載器
Customer.class.getClassLoader();
em.createNamedQuery("Customer.findByEmail").setParameter("email", user).getSingleResult().getClass().getClassLoader();
然后,您可以嘗試查找更多信息。
如果您有選擇,我建議您使用JPA 2.0並使用:
<T> TypedQuery<T> createNamedQuery(java.lang.String name,
java.lang.Class<T> resultClass)
我認為應該避免類強制轉換異常。
就像allprog所說,這是因為返回給您的類來自與您的Web應用程序不同的jar(我假設您正在使用Web應用程序)。
在運行時,由類加載器從一個jar(或您的應用程序)加載的Customer從另一個jar(或應用程序)轉換為Customer。
如此不同的可能性:
在兩種情況下,您都會得到相同的錯誤。
您可以嘗試使用javap反編譯您的類,看看會發生什么。
如果您想進一步了解classLoading,請訪問:http: //zeroturnaround.com/rebellabs/video-do-you-really-get-class-loaders-a-jazoon-talk-by-jevgeni-kabanov/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.