簡體   English   中英

完全相同的類中的ClassCastException

[英]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。

如此不同的可能性:

  1. “ Customer”的版本不同並且classLoader相同
  2. 或兩個客戶相同,而類加載器不同。

在兩種情況下,您都會得到相同的錯誤。

您可以嘗試使用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.

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