hibernate多对多的保存问题(中间表不更新的奇怪问题精华帖)

[复制链接]
查看11 | 回复2 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
问题是这样的,我想实现Menu(菜单类), MenuItem(菜单项类),两个类是多对多关系,public class Menu {
/* 主键 */
private Integer Id;
/* 菜单名 */
private String name;

/* 一个菜单有多个菜单项, 多对多的关系 */
private Set menuItems = new HashSet(0);
/**
* @hibernate.id generator-class="native" column="menu_id" type="java.lang.Integer"
*
*/
public Integer getId() {
return Id;
}
/**
* @param id
* the id to set
*/
public void setId(Integer id) {
Id = id;
}
/**
* @hibernate.set table="menu_menu_item" lazy="true" inverse="true" cascade="save- update"
* @hibernate.collection-key column="menu_id"
* @hibernate.collection-many-to-many class="com.zhidian.model.MenuItem" column="menu_item_id"
* @return 菜单项的集合
*/
public Set getMenuItems() {
return menuItems;
}
/**
* @param menuItems
* the menuItems to set
*/
public void setMenuItems(Set menuItems) {
this.menuItems = menuItems;
}
/**
* @hibernate.property column="name" type="java.lang.String" length="60"
* @return 菜单名
*/
public String getName() {
return name;
}
/**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}
}
public class MenuItem {
/* 主键 */
private Integer id;
/* 菜单项名称 */
private String name;

/* 一个菜单项对应多个菜单。多对多关系 */
private Set menus = new HashSet(0);

/**
* @hibernate.id generator-class="native" column="menu_item_id" type="java.lang.Integer"
* @return the id
*/
public Integer getId() {
return id;
}
/**
* @param id
* the id to set
*/
public void setId(Integer id) {
this.id = id;
}
/**
* @hibernate.set table="menu_menu_item" lazy="true" inverse="true" cascade="save- update"
* @hibernate.collection-key column="menu_item_id"
* @hibernate.collection-many-to-many class="com.zhidian.model.Menu" column="menu_id"
* @return 菜单项的集合
*/
public Set getMenus() {
return menus;
}
/**
* @param menus
* the menus to set
*/
public void setMenus(Set menus) {
this.menus = menus;
}
/**
* @hibernate.property column="name" type="java.lang.String" length="40"
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}
}
测试: /*菜单加菜单项*/
public void testMenuAddItem()
{
Session sn = HibernateUtil.getSession();
Transaction tx = sn.beginTransaction();
Menu menu = new Menu();
menu.setName("文件");
MenuItem menuItem = new MenuItem();
menuItem.setName("打开");
menu.getMenuItems().add(menuItem);
menuItem.getMenus().add(menu);
sn.save(menu);
sn.save(menuItem);
tx.commit();
sn.close();
}
执行结果:
Hibernate: insert into menus (create_time, isDelete, name, event_name, javascript_name) values (?, ?, ?, ?, ?)
Hibernate: insert into menu_item (create_time, is_delete, name, url) values (?, ?, ?, ?)
结论是:三个表中的两个表menus,menu_item更新了,但是中间表menu_menu_item没有相应数据.
我怀疑是对应关系有问题,可是就看不出问题出在哪?帮帮忙.谢谢
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
你给中间表对应的类配置映射了吗?加了一个中间表把他们拆为两个一对多的关系,按照一对多的关系做应该没有问题.
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
我觉得应该大概是这样的配置,不知道对不对


... ...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行