gpt4 book ai didi

java - 如何在 Hibernate/Grails 中使用 Switch Case/Function 进行排序

转载 作者:行者123 更新时间:2023-12-02 15:53:20 26 4
gpt4 key购买 nike

我有以下 hibernate/grails 域类,这是一个遗留数据库,我没有选项来改造这些。

class Contact {
String firstName
String lastName
}

class Company {
String name
}

class Customer {
Company company
Contact contact
}

客户可以是公司或联系人,所以现在我有一个用例,我需要按名称对客户进行排序。 (如果是公司使用名称,如果是联系人使用 firstName + lastName)。

我查看了 hibernate 源,以查找是否有一种方法可以通过使用 switch case 来支持命令,但没有成功。有人遇到过类似的用例吗?你是如何处理这个用例或任​​何建议的?

谢谢。

最佳答案

尽管@droggo 在查找器中是正确的,其中查询和条件查询优于 HQL,但对于您的情况,这些选项不可用。

如果您需要排序的属性在同一个域类中,您将能够使用 derived property .您将无法对其进行单元测试,并且它依赖于数据库,但您可以使用任何 GORM 查询方法。相比之下,HQL 可能很难看,但它可以满足您的需求而无需大张旗鼓。

用 HQL 完成它

基本上,您将使用 CASE WHEN 的组合按计算值排序和 CONCAT :

def customers = Customer.executeQuery "SELECT cust FROM Customer AS cust LEFT OUTER JOIN cust.company AS comp LEFT OUTER JOIN cust.contact AS cont ORDER BY CASE WHEN comp.id IS NULL THEN CONCAT(cont.firstName, cont.lastName) ELSE comp.name END"

那应该这样做。查询将返回 ListCustomerCompany 排序的实例姓名或 Contact名字和姓氏。

关于java - 如何在 Hibernate/Grails 中使用 Switch Case/Function 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35873255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com