Hibernate criteria createalias 方法生成额外的 select 查询

Hibernate criteria createalias method generate additional select query

Hibernate createalias() 方法用于创建连接。当我调用 s.iterator() 方法时,hibernate 正在生成另一个 select 查询来获取子记录?根据我的理解,它生成单个 select 查询以使用连接获取父记录和子记录。

Criteria ct = sn.createCriteria(Vendor.class);      
Criteria ct1= ct.createAlias("children", "cust");   
List<Vendor> l = ct.list();
Iterator<Vendor> i = l.iterator();
while (i.hasNext()) {
    Vendor v = (Vendor) i.next();
    System.out.println("name " + v.getVendorname());
    Set<Customer> s = v.getChildren();
    Iterator<Customer> it = s.iterator();
    while (it.hasNext()) {
        Customer c = it.next();
        System.out.println("custname " + c.getCustomername());
    }
}

映射文件:

<hibernate-mapping>
    <class name="com.criteria.example.Customer" table="customer">
        <id name="customerid" column="cid">
            <generator class="native" />
        </id>
        <property name="customername" type="string">
            <column name="cname" length="10" not-null="true" />
        </property>
    </class>
</hibernate-mapping>
<hibernate-mapping>
    <class name="com.criteria.example.Vendor" table="vendor">
        <id name="vendorid" column="vid">
            <generator class="native" />
        </id>
        <property name="vendorname" type="string">
            <column name="vname" length="10" not-null="true" />
        </property>
        <set name="children" inverse="false" cascade="all" lazy="false">
            <key column="vendid" not-null="true" />
            <one-to-many class="com.criteria.example.Customer" />
        </set>
    </class>
</hibernate-mapping>

在 google 上多次搜索后,我终于找到了这个问题的答案。 生成额外的查询是休眠中的一个错误。