java - Spring EntityManager 已关闭

标签 java spring dao

我想搜索不唯一的用户名。我在 DAO 中实现了以下代码,它给出了错误 HTTP Status 500 - 请求处理失败;嵌套异常是java.lang.IllegalStateException:EntityManager已关闭

@PersistenceContext
    private EntityManager entityManager;

    @Transactional
    public void save(Client client) {
        entityManager.persist(client);
    }

public Client findByUsername(String username) {
        Query query = entityManager.createNamedQuery("Client.CheckUsername");
          query.setParameter("username", username);
    return (Client) query.getSingleResult();
}

查询:@NamedQuery(name="Client.CheckUsername", query="SELECT c.username FROM Client c WHERE c.username = :username")

服务:

@Autowired 
    ClientDAO clientDAO;

    public Client findClientByUsername(String username){
        System.out.println("findclientbyusername: " + username);
        return clientDAO.findByUsername(username);
    }

    public boolean isUsernameUnique(String username) {
        Client client = findClientByUsername(username);
        System.out.println("isusernameunique?: " + username);
        System.out.println(client);
        return (client == null || ((username != null) && client.getUsername() == username));

如何解决这个问题?

最佳答案

首先,您需要更改查询,因为它返回一个字符串,而不是一个对象。 findByUsername 函数返回对象。

@NamedQuery(name="Client.CheckUsername", query="SELECT c FROM Client c WHERE c.username = :username")

服务:

@Autowired 
ClientDAO clientDAO;

public Client findClientByUsername(String username){
      return clientDAO.findByUsername(username);
}

public boolean isUsernameUnique(String username) {
    Client client = findClientByUsername(username);
     return (client == null || ((username != null) && client.getUsername() == username));

道:

public Client findByUsername(String username) {
        Query query = entityManager.createNamedQuery("Client.CheckUsername");
          query.setParameter("username", username);
    return (Client) query.getSingleResult();
}

我强烈建议您使用 DEBUG 功能,而不是在函数中打印变量。

关于java - Spring EntityManager 已关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42231936/

相关文章:

java - 将 DAO Autowiring 到服务中

java - 如何避免加入并方便扩展

Java、JNI 和 C++ : How do I generate a header file from native method declarations?

java - 按字符串中的第二个单词对 ArrayList 进行排序

java - 跨 war 共享JSP文件,在java servlet中使用forward

java - 要传递给 spring 应用程序上下文的用户输入参数

java - HQL 检查字段是否包含字符串列表中的任何字符串

java - 同时更新和读取表?

java - IE 不支持中文和日文?

java - 设计一个hibernate dao