我想搜索不唯一的用户名。我在 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/