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

        有两个表: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值