25

假设我有一个包含两列firstnamelastname字符串数据类型的表。通常我写我的 hql 查询像

"select firstname,lastname from contact"

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

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

4

4 回答 4

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

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

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

请参阅文档

于 2013-07-28T16:45:16.503 回答
23

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

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

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

在您的情况下,您可以执行以下操作:

"select fullName from Contact"
于 2015-05-22T01:08:39.067 回答
4

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

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

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

于 2016-03-16T09:40:34.217 回答
3

我是用 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();}
于 2014-10-30T09:35:20.057 回答