Hibernate使用中间表完成单向多对多关联关系的配置和级联操作示例

来源:互联网 发布:电影采集站源码 编辑:程序博客网 时间:2024/05/21 11:07

        有两个表: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字段进行修改

0 0
原创粉丝点击