【问题标题】:Can we concatenate two properties in Hibernate HQL query?我们可以在 Hibernate HQL 查询中连接两个属性吗?
【发布时间】:2013-07-28 16:40:04
【问题描述】:

假设我有一张表,其中有两列 firstnamelastname,数据类型为 String。通常我写我的 hql 查询像

"select firstname,lastname from contact"

我可以编写一个连接两个属性的 hql 查询吗?

也许像"select firstname+lastname as fullname from Contact"

【问题讨论】:

    标签: hibernate


    【解决方案1】:
    select concat(c.firstname, c.lastname) as fullname from Contact c
    

    或者,如果你想要一个分隔符:

    select concat(c.firstname, ' ', c.lastname) as fullname from Contact c
    

    the documentation

    【讨论】:

    • 谢谢。是否也可以在两者之间添加","space
    【解决方案2】:

    您可以在您的实体中创建一个计算列:

    @Formula(value = " concat(first_name, ' ', last_name) ")
    private String fullName;
    

    在您的 HQL 中,您只需像引用其他任何字段一样引用此字段。

    在你的情况下,你可以这样做:

    "select fullName from Contact"
    

    【讨论】:

    • 这会产生一个实际的数据库列吗?还是这更像是记忆中的事情?
    • @bvdb 我不是数据库专家,但我会说这取决于数据库引擎。您可以做的是记录 SQL 语句并执行解释计划。
    【解决方案3】:

    你也可以使用 ||连接运算符:

    "select c.firstName || ' ' || c.lastName as fullName from Contact"
    

    尽管阅读起来可能会令人困惑。

    【讨论】:

      【解决方案4】:

      我是用 hql 这样做的

      public List<Contract> findContracts(String fullName) {
          Query q = sessionFactory.getCurrentSession().createQuery("from Contract c where :fullName = concat(c.firstname, ' ', c.lastname)");
           q.setString("fullName", fullName);
           return q.list();}
      

      【讨论】:

        猜你喜欢
        • 2011-05-18
        • 1970-01-01
        • 2016-04-21
        • 1970-01-01
        • 2015-03-10
        • 2021-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多