Hibernate

Senhores,

Imaginem o seguinte cenario:

Order (orderId, orderDate, blablabla…)
OrderItem (orderId, prodId, qty, blablabla…)
Product (prodId, descr, price, blablabla…)

Quero fazer o mapeamento de tal forma que em um unico session.list() eu consiga recuperar uma cascata de todos esses objetos aninhados pra poder iterar sobre eles.

Li algo sobre component e one-to-many, mas nao consegui entender como funciona.

Ha alguma forma de fazer isso?

Se puderem, por favor enviem um exemplo completo com essa situação.

Valeu.

Um relacionamento one-to-many é o que você precisa. Um exemplo:

class Order
{
    Integer idOrder;
    String date;
    List itens;
    // gets e sets
}

class Item
{
    Integer idItem;
    Order order;
    String name;
    List products;
    // gets e sets
}

class Product
{
   Integer idProduct;
   Item item;
   String name;
   // gets e sets
}

E os mapeamentos, considerando que o relacionamento é bidirecional

order.hbm.xml
<bag lazy="true" name="itens" inverse="true"
	table="tableItens" cascade="all">
	<key column="columnIDorder"/>
	<one-to-many class="meu.pacote.Item" />
</bag>


item.hbm.xml
<bag lazy="true" name="products" inverse="true"
	table="tableProducts" cascade="all">
	<key column="columnIDitem"/>
	<one-to-many class="meu.pacote.Product" />
</bag>

<many-to-one name="order" 
	class="meu.pacote.Order"
	column="columnIDorder"/>

product.hbm.xml
<many-to-one name="item" 
	class="meu.pacote.Item"
	column="columnIDitem"/>

Assim você consegue fazer:

order.getItens();
order.getItens().get( 0 ).getProducts();
item.getOrder();
item.getProducts();
product.getItem();

Mas leia com cuidado a documentação, caso contrário não conseguirá ir para frente.