我现在有一张用户表
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集合
<set name="conuserroles" inverse="true" table="conuserrole"
lazy="false">
<key>
<column name="userId" not-null="true" />
</key>
<many-to-many class="com.act.dao.pojo.Role" column="roleId" />
</set>
角色Role.hbm.xml
<set name="conuserroles" inverse="true" table="conuserrole"
lazy="false">
<key>
<column name="roleId" not-null="true" />
</key>
<many-to-many class="com.act.dao.pojo.Userinfo"
column="userId" />
</set>员工角色连接表 Conuserrole.hbm.xml
<many-to-one name="userinfo" class="com.act.dao.pojo.Userinfo"
fetch="select">
<column name="userId" not-null="true" />
</many-to-one>
<many-to-one name="role" class="com.act.dao.pojo.Role"
fetch="select">
<column name="roleId" not-null="true" />三者之间的关联关系是这样的,
我该加什么属性或设置什么地方才能实现我在添加员工的时候也能在员工角色连接表中增加一行数据?
</many-to-one>
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集合
<set name="conuserroles" inverse="true" table="conuserrole"
lazy="false">
<key>
<column name="userId" not-null="true" />
</key>
<many-to-many class="com.act.dao.pojo.Role" column="roleId" />
</set>
角色Role.hbm.xml
<set name="conuserroles" inverse="true" table="conuserrole"
lazy="false">
<key>
<column name="roleId" not-null="true" />
</key>
<many-to-many class="com.act.dao.pojo.Userinfo"
column="userId" />
</set>员工角色连接表 Conuserrole.hbm.xml
<many-to-one name="userinfo" class="com.act.dao.pojo.Userinfo"
fetch="select">
<column name="userId" not-null="true" />
</many-to-one>
<many-to-one name="role" class="com.act.dao.pojo.Role"
fetch="select">
<column name="roleId" not-null="true" />三者之间的关联关系是这样的,
我该加什么属性或设置什么地方才能实现我在添加员工的时候也能在员工角色连接表中增加一行数据?
</many-to-one>
我看视频的学到的双向多对多映射是 只需要配置 UserInfo.hbm.xml和Role.hbm.xml的。
只要存储user和role的话,user和role的连接表就会由hibernate自动维护。
可能是我没听懂你需要实现的需求。可能我没学好。
斗胆回复了。
UP
在用户配置 中 配置弱实体关联 R 中, 配置反转为真,级联为保存更新即可。在一次事务中因为插入用户ID在提交后才生效,配置反转为真就解决了。<many-to-many class="com.act.dao.pojo.Userinfo"
column="userId" />这根本就没用,你想通过角色寻找用户可通过弱实体关系,而不是角色实体。
把其中一方设置成false试试