【问题标题】:Selecting by specific elements in a list in HQL按 HQL 列表中的特定元素进行选择
【发布时间】:2010-12-05 08:18:09
【问题描述】:


我正在为动态查询实现“QueryEngine”设计模式
与查询语言(如 LINQ)的松散连接。
我很难为列表中的特定元素编写 HQL。
即:

public class Cat()
{
    public int ID { get; set; }
    public string Name { get; set; }
    public Cat Child { get; set; }
}

现在我正在尝试通过他的孩子选择一只猫,所以 HQL 应该是这样的:

SELECT cat FROM CAT as cat  
WHERE cat.Child = {"Any value or subsearch"}

但如果我将 Cat 类更改为具有一对多引用:

public class Cat()
{
    public int ID { get; set; }
    public string Name { get; set; }
    public IList<Cat> Children { get; set; }
}

HQL 现在看起来像这样(我正在尝试由列表中的特定子项进行选择)

SELECT cat FROM CAT as cat  
WHERE {"Any value or subsearch"} IN elements(Children}

我的问题是,我可以让第二个查询与第一个查询的顺序相似
像这样的:

SELECT cat FROM CAT as cat  
WHERE Children CONTAIN {"Any value or subsearch"}

谢谢 [=

【问题讨论】:

    标签: nhibernate hql


    【解决方案1】:

    您可能正在寻找这样的东西:

    select cat from Cat cat
        join cat.Children child
        where child.Something is true
    

    【讨论】:

    • 这个 HQL 的问题是我必须告诉 QueryEngine 在 select 之后插入一个“Join”子句。设计模式分为不同的类,每个类负责插入部分 HQL 到整个查询中.. 所以 SELECT 子句的生成器甚至不知道 WHERE 子句的生成器..
    【解决方案2】:

    HQL 和 Linq 都不适合动态构造的查询。

    我建议你改用Criteria

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 2018-04-05
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 2019-03-28
      • 2020-11-15
      • 2020-12-24
      相关资源
      最近更新 更多