在另一个中包含一个 Hibernate 命名查询

Include one Hibernate Named Query in another

在我使用 Hibernate 的 Java 程序中,我有 XML 包含两个命名查询的文件:

<hibernate-mapping>
    <sql-query name="BIG_SQL_QUERY_WITH_LOT_OF_WHERE">
       <![CDATA[
         select * from Foo
         where ...
           and ...
           and ...
           ...
         order by ...
       ]]>
    </sql-query>

    <sql-query name="BIG_SQL_QUERY_WITH_LOT_OF_WHERE_WITH_ONE_MORE_CONDITION">
       <![CDATA[
         select * from Foo
         where ...
           and ...
           and ...
           ...
           and one_more_condition = ...
         order by ...
       ]]>
</hibernate-mapping>

第一个查询("BIG_SQL_QUERY_WITH_LOT_OF_WHERE")里面有很多连接和条件。第二个查询 ("BIG_SQL_QUERY_WITH_LOT_OF_WHERE_WITH_ONE_MORE_CONDITION") 是同一个查询,但它多了一个 where 条件。

是否有任何方法可以使用此查询的公共部分进行一个查询并在其中仅使用(或包含)第二个查询的这一部分(仅此一个条件)?

纯XML解决方案: 您可以使用 XML entity,这是一个缩写条目,您可以将其放在 XML 文档中的任何位置:

<?xml version="1.0" standalone="no" ?>
<!DOCTYPE hibernate-mapping [
<!ENTITY includedStuff SYSTEM "common.xml">
]>
<hibernate-mapping>
    <sql-query name="BIG_SQL_QUERY_WITH_LOT_OF_WHERE">
       &includedStuff;
    </sql-query>
</hibernate-mapping>