composite-element的典型用法
1、情景描述
顾客Customer下订单Order,Order里面包含很多条目Item及各条目的数量quantity信息。Customer和Order是一对多的关系;Order和Item是多对多的关系。
2、数据库结构
orders表:{ orderId , orderName }
item表:{ itemId , itemName }
order_item表:{ orderId , itemId , quantity }
3、Order.hbm.xml
<hibernate-mapping>
<class name="com.persistent.Order" table="orders">
<id name="id" column="orderId" unsaved-value="null">
<generator class="increment"></generator>
</id>
<property name="name" column="orderName"></property>
<set name="perchaseItems" table="order_item" lazy="false" cascade="save-update">
<key column="orderId"></key>
<composite-element class="com.persistent.Perchase">
<property name="quantity"></property>
<many-to-one name="item" column="itemId" class="com.persistent.Item" lazy="false"></many-to-one>
</composite-element>
</set>
</class>
</hibernate-mapping>4、Item.hbm.xml
<hibernate-mapping>
<class name="com.persistent.Item" table="item">
<id name="id" column="itemId" unsaved-value="null">
<generator class="increment">
</generator>
</id>
<property name="name" column="itemName"></property>
</class>
</hibernate-mapping>5、Order.java、Item.java和Perchase.java

public class Order ...{
private Long id;
private String name;
private Set purchaseItems = new HashSet();
...
}

public class Item ...{
private Long id;
private String name;
...
}

public class Perchase ...{
private int quantity;
private Item item;
...
}6、测试代码
Session session = HibernateSessionFactory.getSession();
session.beginTransaction();
List result = session.createQuery("from Order").list(); 
for(int i = 0; i<result.size(); i++)...{
Order order = (Order)result.get(i);
System.out.println(order.getId()+" "+order.getName());
Set perchases = order.getPurchaseItems();
for(Iterator it = perchases.iterator(); it.hasNext();)...{
Perchase perchase = (Perchase)it.next();
System.out.print(perchase.getQuantity()+" ");
System.out.println(perchase.getItem().getId()+" "+perchase.getItem().getName());
}
}
session.getTransaction().commit();
本文介绍了一个使用Hibernate的复合元素映射示例,通过一个订单包含多个条目及其数量的场景来展示复合元素的使用方式。涉及的主要实体包括客户(Customer)、订单(Order)和条目(Item)。
1362

被折叠的 条评论
为什么被折叠?



