我现在有一张用户表
CREATE TABLE UserInfo
(
userId INT NOT NULL AUTO_INCREMENT,
USERNAME VARCHAR(30) NOT NULL,
PASSWORD VARCHAR(30) NOT NULL,
PID INT NULL ,
GID INT NULL ,
PRIMARY KEY (userId)
)ENGINE=InnoDB DEFAULT CHARSET=gb2312;
一张角色表
CREATE TABLE ROLE
(
ROLEID INT NOT NULL AUTO_INCREMENT,
ROLENAME VARCHAR(20) NOT NULL,
PRIMARY KEY(ROLEID)
)ENGINE=InnoDB DEFAULT CHARSET=gb2312;
还有一张员工角色连接表,里面分别是用户的ID和角色的ID
CREATE TABLE ConUserRole
(
ConUserRoleID INT NOT NULL AUTO_INCREMENT,
userId INT NOT NULL,
roleId INT NOT NULL,
PRIMARY KEY (ConUserRoleID)
)ENGINE=InnoDB DEFAULT CHARSET=gb2312;
现在我新建一个用户,在页面列出所有的角色名称,注册时可以选择多个角色,那么就需要在上面中间表中插入一行数据,但是现在中间表插不了
我的hibernate.xml文件是这样的
UserInfo.hbm.xml文件中存储的是角色中间表的set集合
lazy="false">
角色Role.hbm.xml
lazy="false">
column="userId" />
员工角色连接表 Conuserrole.hbm.xml
fetch="select">
fetch="select">
三者之间的关联关系是这样的,
我该加什么属性或设置什么地方才能实现我在添加员工的时候也能在员工角色连接表中增加一行数据?
[b]问题补充:[/b]
麻烦你告诉我第二种方法该怎么配置映射文件呢? 谢谢了!!!
解决的方法好像很多,我会这样去做
UserInfo类和Role类中都加入
[code="java"]Set conuserrole=new HashSet(0)[/code]
作为属性和Conuserrole双向关联,
Conuserrole也要加入UserInfo,Role这两个类作为属性。
这样UserInfo和Role跟Conuserrole都是一对多的关系,所以映射就要修改了,在UserInfo和Role这两个映射文件中是
[code="java"] inverse="true" lazy="false">
[/code]
在Conuserrole映射文件中加入
cascade="save-update">
跟员工添加角色就直接用Conuserrole类就可以了,或则在UserInfo加一方法
[code="java"] public void addAcct(Conuserrole con){
conuserrole.add(con);
con.setUsr(this);
}[/code]
也可以哦
还一中方法就是把表改了,ConUserRole表取掉ConUserRoleID,用userId , roleId做联合主键,也不要ConUserRole实体了哦
看看例子吧
http://www.blogjava.net/zhyiwww/archive/2009/04/23/254872.html
http://lavasoft.blog.51cto.com/62575/39344
还有一种就是
UserInfo.hbm.xml文件中存储的是角色中间表的set集合
[code="java"] lazy="false">
角色Role.hbm.xml
lazy="false">
column="userId" />
[/code]
修改表
CREATE TABLE ConUserRole
(
userId INT NOT NULL,
roleId INT NOT NULL,
)ENGINE=InnoDB DEFAULT CHARSET=gb2312;
这里可以该成联合主键
不需要实体的