假设我有两个表,例如:
表 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 限制,以便我可以考虑除映射中定义的主键之外的其他字段?
问候