0

假设我有两个表,例如:

表 A:

  • 身份证号
  • [任何其他领域]

表 B:

  • id 号(它与表 A 中的 id 相同,因此是外键)
  • some_value varchar2

对于一个表 A 条目,表 B 可以有多个条目。

使用此设置,如果我对表 A 有一些休眠查询,我可以通过添加此标准来查看表 B 中有多少条目:

Restrictions.sizeGt("TableB", 0)

这将运行如下查询:

select id from table_a tba where 0 < (select count(*) from table_b where tba.id = id)

但是,我需要能够添加一个限制,该限制将比较某个列表中的所有值作为此限制的一部分,一些 sql 代码如下:

select id from table_a tba where 0 < (select count(*) from table_b where tba.id = id and some_value in (...))

有了这个限制,我可以计算但没有我需要的列表比较。任何向主查询添加条件的尝试都让我将第二个表作为连接包括在内,我不需要...

不得不说表A和表B已经是持久化类了,表B在表A映射上定义如下:

    <map name="TableB" table="table_b" cascade="all, delete-orphan" inverse="true" lazy="true">
        <key column="id"/>
        <index column="some_value" type="string"/>
        <one-to-many class="myClassDef"/>
    </map>

所以,问题是,如何将 Criterion 添加到 sizeGt 限制,以便我可以考虑除映射中定义的主键之外的其他字段?

问候

4

0 回答 0