gpt4 book ai didi

java - 在调用 getSingleResult() 方法时出现 java.lang.ClassCastException?

转载 作者:行者123 更新时间:2023-11-29 01:02:55 26 4
gpt4 key购买 nike

我有以下 java 类来使用 JPA 连接和查询 MySQL 数据库:

public class UserEntityManager {

private EntityManagerFactory emf;
private EntityManager em;
private EntityTransaction tx;

public UserEntityManager() {
emf = Persistence.createEntityManagerFactory("OmegaThingsPU");
em = emf.createEntityManager();
tx = em.getTransaction();
}

public User getUser(String username, String password) {
Query query = em.createQuery("SELECT u FROM User u "
+ "WHERE u.userUsername = :userUsername "
+ "AND u.userPassword = :userPassword");
query.setParameter("userUsername", username);
query.setParameter("userPassword", password);
User user;
try {
user = (User) query.getSingleResult();
em.close();
emf.close();
return user;
} catch (Exception ex) {
System.out.println("Exception ****************** ");
System.out.println(ex.toString());
em.close();
emf.close();
return null;
}
}
}

我总是遇到这个异常:

java.lang.ClassCastException: com.omegathings.persistant.User cannot be cast to com.omegathings.persistant.User  

我尝试了 getResultList().get(0),但它也不起作用,我在这里缺少什么?

更新:
重新启动 glassfish 服务器(版本 4.1)将暂时解决问题,但在修改代码并重新部署应用程序时,我再次遇到异常。

更新:
似乎在重新部署应用程序时,我得到了 2 个不同的类加载器,如下所示:

WebappClassLoader (delegate=true; repositories=WEB-INF/classes/)  
WebappClassLoader (delegate=true)

更新:
打印出上述 2 个类加载器的父级结果如下:

org.glassfish.internal.api.DelegatingClassLoader@5b11b82d  
org.glassfish.internal.api.DelegatingClassLoader@5b11b82d

如您所见,在第一次部署时,Id 是相同的。
现在在我得到的第二次部署中:

org.glassfish.internal.api.DelegatingClassLoader@57c83b1d  
org.glassfish.internal.api.DelegatingClassLoader@5b11b82d

如果 2 个 parent 有不同的 ID,我不确定这是否有助于解决我的问题。

最佳答案

经过多次测试,我终于弄清楚了问题....
问题出在以下 websocket 代码中:

@ServerEndpoint("/endpoint/{authentication}")
public class WSManager {
UserEntityManager userEntityManager = new UserEntityManager();
@OnOpen
public void onOpen(Session session, @PathParam("authentication") String authString) {
User user = new User();
user = (User) userEntityManager.getUser(parameter[0]);}

问题是在以下任何 websocket 类方法(onOpen、onMessage、onError、onClose)之外实例化 UserEntityManager 类。

只需将实例化移动到 onOpen 方法中即可解决问题。

我无法详细说明这种行为的原因,因此,一些专家可能会这样做。

关于java - 在调用 getSingleResult() 方法时出现 java.lang.ClassCastException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28923544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com