【问题标题】:Hibernate Named Query (HQL) search with keyword使用关键字进行休眠命名查询 (HQL) 搜索
【发布时间】:2015-10-07 03:48:47
【问题描述】:

我想创建一个查询,该查询能够根据人名或人名的通配符搜索来搜索人名。

【问题讨论】:

    标签: hibernate hql


    【解决方案1】:

    我其实很困惑。您说您的实体类名为 PersonEntity.java,但您的 HQL 查询是从 Operson 中选择的。

    在 HQL 中,您查询的是 Java 对象而不是实际的表。无论如何,我会假设您的实体名为 Operson。这是正确的代码:

    public List<Operson> searchPerson(String keyword) {
        try {
            String HQL = "SELECT o FROM Operson o WHERE o.opusername like :username OR o.opname like :name";
            return em.createQuery(HQL)
              .setParameter("username", "%" + keyword.toUpperCase() + "%")
              .setParameter("name", "%" + keyword.toUpperCase() + "%")
              .getResultList();
    
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    

    注意:

    1. 使用参数时,您不要在 HQL 查询中包含通配符。通过 setParameter() 设置实际参数时使用通配符。
    2. 你的方法应该返回 List

    【讨论】:

    • 嗨,我输入了错误的名称,它应该是 OPerson.java 而不是 PersonEntity.java。我已经做出了改变。如果我想查询:public List searchPerson(String keyword) { }。我该怎么做呢?
    • 您的查询中有 2 个参数,所以我认为您的方法中也应该需要 2 个参数。您想对关键字参数具体做什么?查询中的用户名和用户参数是否会传递相同的关键字?
    • 是的。用于在我的查询中传递给用户名和用户参数的关键字。这就是我感到困惑的事情。我知道当传递 2 个参数时,我应该在我的方法中放入 2 个参数。如果我使用关键字传递 2 个参数(用户名和名称)怎么办?
    • 简单,用相同的关键字变量设置2个查询参数。我更新了代码以反映这一点
    • 好的。现在我知道了它的概念。非常感谢您的帮助:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多