有两个表:categories和items;原本两个表是没有关系的,现在需要在新增和修改Categories表的同时对items表进行新增和修改操作。在不改变两个表结构的前提下,需要建立一个中间表category_item表来存储这两个表之间的关联关系。
一、表结构
二、Hibernate配置(只需要配置Categroies和Items的hibernate文件即可,中间表不需要单另写一个文件)
1、Categories类:categories.hbm.xml
<class name="mypack.Categories" table="categories">
<id name="id" type="java.lang.Long">
<column name="id"/>
<generator class="sequence">
<param name="sequence">seq_categories</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="name" not-null="true" length="50"/>
</property>
<idbag name="<span style="color:#ff0000;">items</span>" table="categoryItem" cascade="save-update" lazy="true">
<collection-id type="java.lang.Long" column="id">
<generator class="sequence">
<param name="sequence">seq_categories_items</param>
</generator>
</collection-id>
<key column="categoty_id"></key>
<many-to-many class="<span style="color:#ff0000;">mypack.Item</span>" column="item_id"/>
</idbag>
</class>
2、Items类:item.hbm.xml
<class name="mypack.Items" table="items">
<id name="id" type="java.lang.Long">
<column name="id"/>
<generator class="sequence">
<param name="sequence">seq_items</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="name" not-null="true" length="50"/>
</property>
<property name="basePrice" type="java.lang.Long">
<column name="base_price"/>
</property>
</class>
三、java类
Categories.java
public class Categories{
private Long id;
private String name;
private List<Item> items = new ArrayList<Item>();
public Categories(){}
public Categories(Long id,String name){
this.id = id;
this.name = name;
}
//get、set方法
……
public void setItems(List<Item> items){
this.items = items;
}
public List<Item> getItems(){
return this.items;
}
}
Item.java
public class Item{
private Long id;
private String name;
private Long basePrice;
//构造方法
……
//get、set方法
……
}
三、新增/修改操作演示(本段代码是一段伪代码,只用来做操作演示)
//新增操作演示代码
Categories cate =new Catetories();
cate.setName("CateName");
List<Item> itemList = new ArrayList<Item>();
Item item = new Item();
item.setName("itemName");
item.setBasePrice(10l);
itemList.add(item);
cate.setItems(itemList);
cateService.save(Cate); //同时操作三个表,向categories表、items表和中间表category_item添加数据
//修改操作演示代码
Categories cate = cateService.getCateById(cateId);
cate.setName("cateName1");
for(Item item:cate.getItems){
item.setName("itemName1");
}
cateService.update(cate); //对categories和items表的name字段进行修改