从Customer到Order,配置在<set>标签中,batch-size表示一次查询几个客户的订单,而不查询的订单数量,配置为2,表示一次查询两个客户的订单数量
<hibernate-mapping> <class name="rock.lee.bean.Customer" table="customer" catalog="test" > <id name="id" column="id" type="int"> <generator class="native"></generator> </id> <set name="orders" cascade="save-update,delete,delete-orphan" inverse="true" fetch="select" lazy="true" batch-size="2"> <!-- customer表order是中所生成的外键列 --> <key column="customer_id"></key> <one-to-many class="rock.lee.bean.Order" /> </set> <property name="name" column="name" type="java.lang.String"></property> <property name="city" column="city" type="java.lang.String"></property> </class> </hibernate-mapping>
查询所有的Customer并且获得Order集合的大小
@Test
public void test05() {
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
List<Customer> list = session.createQuery(" from Customer").list();
for (Customer c : list) {
System.out.println(c.getOrders().size());
}
transaction.commit();
session.close();
}
SQL:
Hibernate:
select
customer0_.id as id0_,
customer0_.name as name0_,
customer0_.city as city0_
from
test.customer customer0_
Hibernate:
select
orders0_.customer_id as customer4_0_1_,
orders0_.id as id1_,
orders0_.id as id1_0_,
orders0_.address as address1_0_,
orders0_.money as money1_0_,
orders0_.customer_id as customer4_1_0_
from
test.orders orders0_
where
orders0_.customer_id in (
?, ?
)
通过in条件查询order
从Orders到Customer配置在Customer.hbm.xml中的<class>标签中batch-size,一次查询几个客户
<hibernate-mapping> <class name="rock.lee.bean.Customer" table="customer" catalog="test" batch-size="2"> </hibernate-mapping>
检索策略的比较