在Hibernate HQL查询中,我们能否连接两个属性?

27

假设我有一个含有两列firstnamelastname的表格,数据类型为字符串。通常情况下,我会按照以下方式编写我的HQL查询:

"select firstname,lastname from contact"

我可以编写一个HQL查询来拼接两个属性吗?

可能是像这样的 "select firstname+lastname as fullname from Contact"

5个回答

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

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

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

请参阅文档


谢谢。是否也可以在它们之间添加“,”或空格? - abiieez

25

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

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

在您的HQL查询中,您可以像对待其他字段一样引用此字段。

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

"select fullName from Contact"

这会导致实际的数据库列吗?还是更多地在内存中进行? - bvdb
@bvdb 我不是数据库专家,但我认为这取决于数据库引擎。你可以做的是记录SQL语句并执行一个解释计划。 - martins.tuga

5
您可以使用 || 运算符进行拼接:
"select c.firstName || ' ' || c.lastName as fullName from Contact"

虽然阅读起来可能会令人困惑。


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();}

0

公共字符串 getname(){返回 first_name+last_name;}

使用此方法将会看到答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接