代码之家  ›  专栏  ›  技术社区  ›  Petar Minchev

休眠继承搜索

  •  1
  • Petar Minchev  · 技术社区  · 14 年前

    我会尽量总结一下我的问题。

    我有一个具有三个属性的基类“base”。它继承了四个阶级——“A”、“B”、“C”和“D”。他们添加了自己的附加属性。我已将此映射为InheritanceType.Joined。现在我要搜索“基本”实体,这意味着我要搜索所有“A”、“B”、“C”和“D”实体的公共属性。我知道怎么做。Hibernate支持它。

    但是我希望有一个功能来搜索不是所有类型,而是其中的一部分。例如,有复选框,用户选择搜索“a”和“d”。同样,搜索是在“base”类的公共三个属性上进行的。我是否必须向基类添加一个附加列来区分类型并手动填充它?我肯定Hibernate有现成的东西,但我找不到。

    当做, 佩塔尔

    2 回复  |  直到 14 年前
        1
  •  1
  •   EJB    14 年前

    可以在hql from子句中命名多个实体:

    from A,D where prop1=:value
    

    也许您需要在WHERE子句中单独命名属性(我不希望这样,但您必须尝试这样做):

    from A as aa,D as dd where aa.prop1= :value or dd.prop1= :value
    
        2
  •  0
  •   Petar Minchev    14 年前

    我尝试了我上面写的东西,它奏效了。因此,在“基本”实体中添加一列“类型”,以便区分子实体。查询是: "from Base where (prop1=:value1) and (prop2=:value2) and (prop3=:value3) and (type in ('1', '4'))" .