2017-02-14 78 views
2

我想搜索不唯一的用戶名。我在DAO中實現了下面的代碼,它給出了錯誤HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalStateException: EntityManager is closedSpring 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)); 

我怎樣才能解決這個問題?

+0

我的猜測是,在返回它之前序列化對象時,你的控制器中有這個錯誤。你可以在調試模式下輸入這個方法執行後的斷點嗎? –

+0

您的'entityManager'實例如何創建? – JonK

+0

我想看看這種方法的服務 –

回答

3

首先你需要改變你的查詢,因爲它返回一個字符串,而不是一個對象。 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功能,而不必打印變量的出的功能。

相關問題