0

當我遇到用戶使用此代碼時,它會按需要工作。休眠自定義類映射

public List<Users> getActiveUsers(User user) { 
    EntityManager entityManager = getEntityManager(); 
    List<User> Users = new ArrayList(); 
    try { 
     users = entityManager.createQuery("select e from User e where e.deleted = :deleted", User.class) 
       .setParameter("deleted", false)     
       .getResultList(); 
    } finally { 
     entityManager.close(); 
    } 
    return users; 
} 

但是,如果我試圖獲得只有一個用戶使用下面的代碼,它會失敗。

User user = (User) entityManager.createQuery("select e from User e where e.deleted = :deleted") 
       .setParameter("deleted", false)+     
       .getSingleResult(); 

我不能映射用戶,該excepction是:「不能轉換com.project.model.User到com.project.model.User」

+1

你可以嘗試使用'entityManager.createQuery(查詢,User.class)'?你在哪裏部署這個? –

+0

我試過了,結果一樣。我在哪裏部署?不知道是否理解,它在localhost中,並且該方法在userRepositoryCustom類中被調用 –

+1

您正在使用哪個應用程序服務器,這似乎是與類加載器相關的問題。也可以嘗試添加到您的查詢「setMaxResults(1)」。 –

回答

1

顯然,代碼沒有問題。我發現了什麼是問題是一樣的這個傢伙:

A classloader proplem related to spring-boot-devtools

然而,用的.properties推土機參考,我沒有工作文件。我設法通過從項目中刪除spring-devtools來啓動並運行代碼。猜猜我可以生活沒有現場重新加載!

1

你忘了把類類型User.class

entityManager.createQuery("SELECT u FROM User u where u.deleted = :deleted", User.class) 
      .setParameter("deleted", false).getSingleResult(); 

你的方法:

public User getActiveUser(User user) { 
    EntityManager entityManager = getEntityManager();  
    try { 
     User user = (User) = entityManager.createQuery 
          ("SELECT u FROM User u WHERE u.deleted = :deleted", User.class) 
          .setParameter("deleted", false).getSingleResult(); 
    } finally { 
     entityManager.close(); 
    } 
    return user; 
} 
  • 眼光放在第一個示例,您使用用戶級和第二用戶(無S IN月底)
  • 你需要照顧這個查詢,因爲它們可能會返回一個以上的記錄
+0

我已經嘗試過,鑄造(用戶)和添加用戶.class –

+0

我試過了,這是我得到的錯誤'無法傳遞「class com.project.model.User(由sun.misc.Launcher $ AppClassLoader(id = 8597)的實例加載)的實例」到「class com.project.model.User(由org.springframework.boot.devtools.restart.classloader.RestartClassLoader(id = 12414)的實例加載)的實例」 –