【问题标题】:Hibernate query for searching part of string用于搜索部分字符串的休眠查询
【发布时间】:2015-04-17 19:41:52
【问题描述】:

我正在尝试编写一个休眠查询来搜索表 Room 是否包含包含部分字符串的房间名称。字符串值在变量中。我写了一个查询来从表中获取确切的房间名称。

findRoom(String name) {
        Query query = em.createQuery("SELECT a FROM Room a WHERE a.roomname=?1");
        query.setParameter(1, name);
        List rooms = query.getResultList();
        return rooms;
         }

在 sql 中查询是这样的:

mysql_query("
SELECT *
FROM `table`
WHERE `column` LIKE '%"name"%' or '%"name"' or '"name"%'
");

我想知道用于搜索与我的查询匹配的表的 hql 查询。我不能直接使用字符串,因此搜索查询必须是基于验证的,并且我需要查询中的所有三种类型,如果它以名称开头,或者包含名称或结束名称。

【问题讨论】:

    标签: java hibernate orm hql


    【解决方案1】:

    我会这样做:

    findRoom(String name) {
            Query query = em.createQuery("SELECT a FROM Room a"
                    + "WHERE a.roomname LIKE CONCAT('%',?1,'%')");
            query.setParameter(1, name);
            List rooms = query.getResultList();
            return rooms;
             }
    

    【讨论】:

    • 再次感谢 :) @Maurice Perry
    【解决方案2】:

    使用like 代替=

    Query query = em.createQuery("SELECT a FROM Room a WHERE a.roomname like ?1");
    
    query.setParameter(1, "%"+name+"%");
    

    【讨论】:

    • 所以,不需要 %name%' 或 '%name' 或 'name%'?! @jens
    • 我需要查询中的所有三种类型,如果它以名称开头,或者包含名称或以名称结尾。你能帮我吗?
    • 我认为 "%"+name+"%" 包括其他情况
    • @Mahin % 代表零到 n 个字符。所以这个%name% 包含了另一个。
    • 非常感谢 :) @jens
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多