那个JPA查询有什么问题,需要通过特定名称来找到一个用户
问题描述:
我有一种方法可以在用户传递参数时搜索一个名称。 现在我需要一种方法来告诉我员工在公司中的角色是什么那个JPA查询有什么问题,需要通过特定名称来找到一个用户
想法是将这些数据插入到组合框中。
这是我曾经看到的姓名通过参数传递的方法:
public List<User> findbyName(String name) {
EntityManager em = getEntityManager();
String sql = "select u from User u where UPPER(u.name) like UPPER ('" + name + "%')";
List<User> u = null;
try {
u = (List<User>) em.createQuery(sql).getResultList();
} catch (Exception e) {
return null;
}
return u;
}
这里是方法,即时通讯试图做的:
public List<User> findbyRole(){
EntityManager em = getEntityManager();
String sql = "select u from User u where UPPER(u.role) like (journalist)";
List<User> u = null;
try {
u = (List<User>) em.createQuery(sql).getResultList();
} catch (Exception e) {
return null;
}
return u;
}
代码插入到组合框,这是正确的?
List <User> list= new UserJpaController().findbyRole();
for(int i=0;i<lista.size();i++){
combojournalist.addItem(list.get(i).getCargo());
}
答
如果你想在你的查询中使用一个字符串journalist
,您可能需要把它放到引号,或者把它作为参数。否则,JPA会认为journalist
是别名,但在查询中未定义这种别名。
所以您的查询应该是这样的(见周围记者引号):
select u from User u where UPPER(u.role) like ('journalist')
,或者如果您使用的参数,这始终是一个更好的选择:
String sql = "select u from User u where UPPER(u.role) like (:role)";
List<User> u = em.createQuery(sql, User.class)
.setParameter("role", "journalist")
.getResultList();
你不应该捕捉异常没有记录错误:'} catch(Exception e){ return null; }'。你的查询是错误的。 – Jens
是的,需要看到,但方法“findbyName”工作正常,但方法“findbyRole”没有返回任何内容,我有一个人作为记者。任何想法为什么? – Janson
应该引用'记者'吗?不应该是'JOURNALIST'吗? –