[Hiberna]多对多关系的中间表更新问题

Complains与Doctor表示多对多的关系:

                                public class Complains {
                                        private long id;
                                        private String date;
                                        private Set<Doctor> doctor;   
                                        private String complainContent; 
                                        private String contacts;  
                                        private String type;  
                                    }
                                    public class Doctor {
                                                        private long id;
                                                        private String doc_name;
                                                        private Department department;
                                                        private Set<Cure> cures;
                                                        private Set<Complains> complains;
                                }

映射配置文件Complains.hbm.xml

 <set name="doctor" table="t_doctor_complains" cascade="all">
            <key column="complainsId"></key>
            <many-to-many class="Doctor" column="doctorId"/>
</set>

映射配置文件Doctor.hbm.xml

 <set name="complains" table="t_doctor_complains" cascade="all">
            <key column="doctorId"></key>
            <many-to-many class="Complains" column="complainsId"/>
</set>

最终生成了三种表,t_complains, t_doctor, t_complains_doctor
但是我想在将Complains类存入数据库的时候,同时更新中间表。
所以我这么做:

 Complains complains2 = new Complains();    
                complains2.setDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").for   mat(new Date(System.currentTimeMillis())));
                complains2.setComplainContent(complains);
                complains2.setContacts(contacts);
                Set<Doctor> doctorSet = new HashSet<>();   
                **doctorSet.add(doctor);**      //这边添加了两个实体的Doctor
                complains2.setDoctor(doctorSet);
                complainsService.save(complains2);   //调用session.save()原始方法

按道理来说应该会更新中间表的,但是中间表没有变化。为什么?

2个回答

中间的被吞掉了,我重新发一下
**set name="complains" table="t_doctor_complains" cascade="all"
key column="doctorId"
many-to-many class="Complains" column="complainsId

set**

                            **set name="doctor" table="t_doctor_complains" cascade="all"
                                    key column="complainsId"
                                    many-to-many class="Doctor" column="doctorId"
                            set**

暂时不知道怎么改格式,请大神指导一下!

解决了,我的doctor不是持久状态的Doctor实体,而是游离态的,只是拥有值,而与数据库没有关系,所以Hibernate没有更新中间表。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
多对多关系中间表问题
请问rn设计一个tag数据库rn有一个表A是postrn表B 是 tagrnrn一个 post 对应多个tagrn一个 tag对应多个postrnrn需要一个中间表rnrnpost_tagrnrn可能tag在以后要加入属性 状态,等rn所以 post_tag表会rnid, -- 单独加了个主键rnpostid,rntagid,rntype,rnisdeleted,rnrn这样设计和 联合主键设计有什么区别,rnrnpostid,rntagid,rntype,rnisdeleted,rnrn谢谢大家
请教多对多关系中间表
rn2张表之间是多对多的关系,通过映射文件,生成了中间表, 把内容插入了2张表后,本以为中间表也应该有更新,可是总是空的。想问问我哪里做错了。rnrn比如说表A和表B,多对多而且是可以有重复元素的。中间表的aId,bId都是表A和表B的外健,可为什么就是没反应呢? 谢谢先。rnrnpublic class Arnrnrnrnprivate IList bList;rnrn....rnrnrnrnA.hbm.xmlrnrnrn rn rn rnrn rnrnpublic class Brnrnrnrnprivate IList aList;rnrn....rnrnrnrnB.hbm.xmlrnrnrn rn rn
多对多关系的中间表怎么插入数据
我写了两个表的Bean,Hibernate自动生成3张表,然后中间表的数据老是说有外键插不进去,应该怎么做?
jpa配置多对多关系(中间表)
两个实体tb_user,tb_role 现在我们再tb_user或者tb_role中任意一个里面进行维护关系,多对对的情况下我们需要创建一个中间表来完成这个关系的映射,我们再tb_user中添加注解@ManyToMany然后再添加一个注解@JoinTable因为我们是要创建中间表所以要使用这个注解。JoinTable注解中我们添加如下例子中的内容,joinColumns当前表中的字段在中间表中的...
Mysql多对多关系利用中间表查询
1、多对多关系,我们举个简单的例子,一个顾客可以买多件商品,同时一类商品(指多件相同的商品)也可以也可以让多个用户购买 下面是对应的表,用户表,商品表以及关系表,其中关系表中userId、metId的外键分别是userTable 的userId 、materialTable 的matId userTable ...
表多对多关系的查询
有3个表T1,T2,T3rnT1为用户表,T2为组表,T3用户与组的关系表rnt1 rnid user_namernrnt2rnid group_namernrnt3rnid user_id user_name group_id group_namernrn一个用户可以属于多个组,一组里拥有多个用户rn现在要列出某一用户所在的所有组里所有其它成员..
多对多关系表设计
我想做个交友平台。rn可是面对好友关多对多的关系。。不晓得如何用数据表来表示rn帮忙~~~~~
表的多对多关系
注意: 多对多关系是通过第三张表来记录关系的. 多对多关系演练 具体操作 新建数据库: 新建demo: tb_Student_Course就是第三张表,记录关系的表. 他不是一个Model,只是一个db.Table.也就是一张数据库表. 我们在程序中是不用操作这张表的,但是在数据库中必须存在. 所以写法跟模型类不一样. 定义模型类: 测试数据: 二次查询: 注意: 这里有个二次查...
mybatis操作多对多关系表更新缓存
有时候我们在对mybatis多对多关系表进行操作后,由于使用了Ehcache二级缓存,所以没有对数据库重新读取数据,导致了数据是之前的。对于这种情况,我们可以根据需要对于一些操作禁用掉二级缓存。 &amp;lt;select id=&quot;selectUserByRoleId&quot; parameterType=&quot;int&quot; resultType=&quot;User&quot; useCache=&quot;false&quot;&amp;gt; 所以在对数据表...
关于多对多关系表的建立!!
--员工表rncreate table Emprn(rn id int primary key,rn name nvarchar(20) rn)rn--爱好表rncreate table Lovern(rn id int primary key,rn lover nvarchar(20)rn)rn--员工爱好表rncreate table EmpLovern(rn ????rn ????rn ????rn)rn一个员工可以有多个爱好,一个爱好可以属于多个员工,请教各位老师这个员工爱好表怎么建立``
如何实现表的多对多关系!!!
在数据库中有两个表,多对多,如何实现各项功能,是否有必要写过程,如有实例相送更好谢谢!!!rn
职员表 和岗位表 多对多关系
职员表 和岗位表 多对多关系rn点编辑岗位按钮 跳出窗口:rn编辑岗位:岗位名称、描述、职员列表、 按钮有:选择职员、保存、取消rnrn点选择职员 跳出职员列表窗口,前面是复选框。选择职员后 点确定,岗位里职员变成刚选择的。。。 然后在岗位编辑里点保存 这种功能用.NET MVC如何实现? 选择职员那个功能如何能做成单独的控件? 哎~我还是觉得WEBFORM好用 。。。。。rnrnrn我的思路是:传给职员controler一个岗位ID 然后职员VIEW点确定后进入职员savecontroler当然要传值岗位ID和选择的职员。。。然后职员的savecontroler里 查询到岗位 对岗位职员进行更改 最后返回岗位编辑 edit(岗位model) 进行保存。。。rnrn但这样费劲 而且不能重用 好麻烦啊。。
sql 表之间多对多关系
[code=SQL]表A:rnA_ID A_Name rn1 张三 rn2 李四 rn3 王五 rnrnrn表B:rnB_ID B_Namern1 Javarn2 MySqlrn3 C#rn4 MsSqlrnrnrn我的意思是表A与表B之间是多对多的关系rn一个人可以对应多个技能rn这样的两个表之间应该怎么关联rn例如我想得到的结果:rnrnA_ID A_Name B_Namern1 张三 Java,MySql rn2 李四 Javarn3 王五 C#,MySql,MsSql[/code]
如何处理多对多关系的表
多对多是不是处理的时候一定要再抽象出一个表来解决两个对象之间的多对多关系?rn
django 多对多关系 的表创建
方法一:自动创建第三张关系表,这种方式自动创建admin_host表,字段id为host_id,admin_id class Host(models.Model):   name = models.CharField(max_length=20)    class Meta():     db_table = 'host'class Admin(models.Model):    ...
Hibernate中表与表的多对多关系
表的多对多关系及操作 多对多的表关系表达 创建表:           用户表                         角色表                                                      关系表
多对多无中间表转换成多对多有中间表
假设一个班有多个老师任课,一个老师可以教多个班rnclass表中有teacher字段,存储的是nvarchar类型的teacher表的一些id,比如“2,10,15”rnteacher表有id和name字段rn现在想增加个中间表R_TeacherClass 有teacherId和classId用于表示这种多对多关系rn请问该如何向这个表中导入数据
多对多关系
多对多的关系是对称的关系,两个连接的表都互相使用has_and_belongs_to_many来声 明它们之间的关系。 在数据库中,多对多关联是使用中间连接表来实现的。它包含一对外键连接两个目标表。 Active Record假定这个连接表的名字是两个目标表名以字母顺序串联起来。在前面例子中, 我们连接表categories和表products, Active Record会去找一个名...
数据库多对多关系的问题?
三张表: rn 表 student 学生表 rn --------------- rn 编号 姓名 rn sid name rn --------------- rnrn 表 class 课程表 rn ------------------------ rn 编号 课程名 rn cid namernrn ------------------------ rnrn 表 mapping 学生-课程映射表 rn ------------------------ rn sid cid rnrn假设1号学生已经选了1,2,3号课,现在该学生想改选为1,2,5号课。rn怎样才能高效的实现数据库的更新?在mapping表中删除1号学生与3号课的映射,并添加1号学生对5号课的映射;rn同时前台应该怎样判断该学生选课状态的变化?
多对多关系问题的处理。
背景:rn 1,表a,b,c其中表b是表a与表c的中间表。rn 2,表c的内容已经知道。rn 3,通过对表b的各种操作来关联表a与表c中各个记录之间的关系。rn 4,我现在把三张表影射到dataset中,然后通过dataview来绑定到datagrid上。rn 5,在确定一个表a中一条记录的关键字段值时候,选择一个表c的记录中的关键字段的值,rn 然后把他们添加到表b中。rn rn代码:rnrn现象:无rn问题:rn 1,以前用的是连接模式下的ado ,对断开模式下的ado不熟悉。rn 2, 我怎么样在操作了中间表之后,界面上能够立刻反映出a与c的关系变化?rn 3,请各位指点迷津。rn 4,希望能够提供一些参考的资料,或者是原代码。rn 5,.net帮助文档中是否有相关的介绍?rn
Java类集 _范例讲解:多对多关系
实例要求 一个学生可以选多门课程, 门课程可以有多个学生参加,那么这就是一个典型的多对多关系。 要完成本程序,首先应该定义两个类:学生信息类Student、课程信息类Course,在一个学生类中存在一个集合,保存全部的课程,而在课程类中也要存在一个集合,保存全部的学生。 实
多对多关系~
类似好友的那种, 一个用户有多个好友,rn建表语句怎么写。
高分求解,多对多关系,中间关系表的插入遇到问题
三张表,artcile,tag,realation其中两个是多对多,请问在插入数据的时候怎么往中间表里面插入数据。rnrn请看代码:rnrn[code=C#] rn protected void Button1_Click(object sender, EventArgs e)rn rn string tags = Textbox1.Text;rn const int COUNT = 1;rn int succuse1 = DataOperate.insertTagsToArticle(tags);rnrn string[] tag = tags.Split(',');rn foreach (string everytag in tag)rn rn DataTable dt = DataOperate.checkTag(everytag);rn if (dt.Rows.Count > 0)rn rn DataOperate.UpdateTag(everytag);rn rn elsern rn DataOperate.insertTagsToTag(everytag.Trim(), COUNT);rn rn rnrn rn Response.Redirect("succuse.aspx");rn rnrn [/code]rnrn请问插入中间表的代码在哪里写?sql语句怎么实现?rn
MVC5多对多关系生成的中间表添加新字段
ASP.NET的MVC5的多对多关系在model层可以轻松表示出来,但也许你会碰到和我一样的问题,即我们需要在中间表添加字段来更方便我们的业务逻辑的实现或者说让我们的数据库设计显得更加合理。我们使用codefirst方式生成数据库可以以以下方式替换。 多对多关系的两张表所建的model类文件分别是Group.cs和Member.cs,其中间表生成的类文件为MemberGroup.cs。其代码如下
求大神!!关于Hibernate多对多关系的中间表插入数据
有两个实体类 角色(Role)、权限(Permission)rnRole.java代码如下:rn[code=java]rn@Entityrn@Table(name = "role")rnpublic class Role implements Serializable rn @Idrn @GeneratedValue(strategy = GenerationType.AUTO)rn private Long id;rn@ManyToMany(cascade = CascadeType.PERSIST, CascadeType.MERGE,fetch = FetchType.EAGER)rn @JoinTable(rn name = "role_permission", rn joinColumns = @JoinColumn(name ="role_id" ), rn inverseJoinColumns = @JoinColumn(name = "permission_id") ) rn private List permissions = new ArrayList();rn //省略若干属性和get/setrnrn public Long getId() rn return id;rn rn public void setId(Long id) rn this.id = id;rn rn public List getPermissions() rn return permissions;rn rn public void setPermissions(List permissions) rn this.permissions = permissions;rn rnrn[/code]rnPermission.java代码如下:rn[code=java]rn@Entityrn@Table(name= "permission")//uniqueConstraints = @UniqueConstraint(columnNames = "permission" ) )rnpublic class Permission implements Serializable rn @Idrn @GeneratedValue(strategy = GenerationType.AUTO)rn private Long id;rnrn@ManyToMany(cascade = CascadeType.PERSIST, CascadeType.MERGE, mappedBy = "permissions", fetch = FetchType.EAGER)rn private List roles = new ArrayList();rn rn //省略若干属性和get/setrnrn public Long getId() rn return id;rn rn public void setId(Long id) rn this.id = id;rn rn public List getRoles() rn return roles;rn rn public void setRoles(List roles) rn this.roles = roles;rn rnrn[/code]rn在项目初始化时有如下代码:rn[code=java]rn Role role = new Role();rn role.setCreateTime(now);rn role.setCreateUser(1);rn role.setIsDelete(0);rn role.setRole(admin);rn role.setUpdateTime(now);rn role.setUpdateUser(1);rnrn // 为超级管理员添加权限rn role.setPermissions(new ArrayList());rn for (Permission permission : sysPer) rn role.getPermissions().add(permission);rn rnrn session.save(role);rn rn[/code]rn代码跑完没有任何异常rn运行结果:rnRole表中插入了一条数据rn中间表Role_Permission表里没有插入数据。rnRole表:rn[img=https://img-bbs.csdn.net/upload/201505/11/1431347039_222994.png][/img]rnRole_Permission表无数据[img=https://img-bbs.csdn.net/upload/201505/11/1431347201_650612.png][/img]:rnrn小弟新学Hibernate4,不知道问题出在哪里,请大家指教指教rn分不够可以加,谢谢
Hibernate 学习心得1: 多对多关系中,中间表无法插入数据。
Hibernate 学习心得之一 多对多关系中,中间表无法插入数据。最近学习 spring4+hibernate4,学习中遇到了很多坑。在这里我来说说我遇到的坑,这里就不介绍如何spring如何集成hibernate。目前学习过程中,我遇到的两个问题1.为何在hibernate多对多关系中,无法插入中间表的数据2.为何配置了spring事务注解。可是在使用@transactional Hibern...
数据表设计:中间表——多对多关系E-R图转换
设计数据表,遇到一个很常见的情况。一、中间表-多对多关系的转化实际中,经常存在多对多关系。以订单和商品为例,一个订单对应多个商品,一个商品也对应多个订单。此时在将E-R图转化为关系模型时,需要引入中间表(也叫做连接表)。中间表包含两个实体表的主键,建立两张表沟通。中间表也可以有普通字段。例如商品数量,和每种商品总和。注意:要把他们与实体表中字段含义区分开。参考连接:https://zhidao.b...
hibernate 多对多关系中间表 update成空 怎么办
有一个user用户类 用户可以关注别的用户 是一个多对多的关系 大概是这样rn[code=java]rn@Entityrnpublic class Userrnrn@Idrn private String account;rn@ManyToManyrn@JoinTable(name = "fan_attention")rn private Set attentions = new HashSet();rnrn[/code]rnrn第一次,建user对象account="t",让他关注"s",能正常写入。退出。rn重新run,新建user对象account=“t”,这时候它的attents是空的,hibernate就将中间表fan_attention 更新为空了。。这个怎么解决。。。
Hibernate多对多关系,访问关系表的问题
有两个实体,一个学生(student),一个课程(course);一个学生有多个课程,一个课程可以属于多个学生。rn在关系表,除了student_id,course_id外,我还要存储开课时间和上课次数。rnrn这在Hibernate中属于哪类关系呢?rnrn谢谢!n[b]问题补充:[/b]n问题的关键:就是关系表里的字段我是有意义的
关于数据库多对多关系表的联结问题?
前几天做一个项目 是在原有的基础上改的 以前的人是按一对多的关系做的rnrn改到最后才发现原来三张表是多对多的关系(学员、老师、培训班)rnrn我那个郁闷哪 一张关系表做的乱七八糟 rnrn我问了一下身边的人 多对多的关系表 一般都是在中间建立一张关系表rnrn而我的则是在学员表里建了一个培训班的ID字段,培训班里建了一个学员ID字段 rnrn这样做会不会对以后的影响很大rnrn另外多对多的关系表 最好的方式是不是中间新建一张关系表 rnrn还有大家建过的最复杂的关系表是哪种关系 应该怎么应对。rnrn我用的是SQL2000rn
一对多关系修改为多对多关系
数据库设计 关系 一对一 多对多
entity frarmwork中,多对多关系如何更新。
Users <==> Roles 两个对象,UserToRole是他们的关系,表明为多对多。rn在创建的时候如果User对象中使用了User.Roles.Add(Role),同自动会在UserToRole表中添加一条记录。rn但是如果更新的话,则不理会,不管是使用User.Roles.Add(role)或User.Roles.Remove(role),添加,删除都用了,就是不产生sql语句。rn我把部分代码拿出来看看。rn[code=C#]rnrnHCRSDataContext dataContext = new HCRSDataContext();rnrn User orgUser = GetUser(user.Id);rnrn rn foreach (Role r in user.Roles)rn rn if (!orgUser.Roles.Any(r1 => r1.Id.Equals(r.Id)))rn rn Role newRole = new Role();rn newRole.Id = r.Id;rn orgUser.Roles.Add(newRole);rn rn rn rn dataContext.SaveChanges();rnrn[/code]
CodeFirst 多对多关系插入数据的问题
Entity_UserDetails和Entity_User是多对多的关系 有个隐藏的中间表rnrn我的插入方法:rn[img=http://www.chengshiguan.com/Uploads/1.png][/img]rnrn运行之后报错:rn[img=http://www.chengshiguan.com/Uploads/2.png][/img]rnrnrn求解决办法rn
通过navicate建立数据库多对多关系表
转载 用于自己学习 感谢博主https://blog.csdn.net/wu18663419760/article/details/71700304 如有侵权联系必删
Hibernate中的表的多对多关系及操作
表的多对多关系及操作 多对多的表关系表达 表: 使用中间表,分别引用两方的ID 对象:  两方都使用集合表达 配置: 操作: inverse: 我是否要放弃维护外键关系 cascade: 是否需要级联操作 (5个) 注意: 配置级联删除时,要小心,双方都配置级联删除, 任意删除一条记录, 整个关系链数据都会被删除. 多对多的对象关系表达
hibernate三张多对多表的中间表问题
我这里有三个表Role,Group,Userrnrn他们之间的关系是:User——Role(多对多),User——Group(多对多),Group——Role(多对多),rnrn将这三个关系放到一张中间表Relation中维护,(id,mainId,RelMainId)(其中mainId可以是User和Group的主键,relMainId可以是Group和Role的主键)rnrn但是为了操作方便讲这张中间表建立了三个实体进行操作UserRole,UserGroup,GroupRole;rnrn可是如果用hibernate来维护关系,由于Relation表有三个外键,可是Relation的每一个记录都只有两个外键,所以插入的时候就会报错,说另一个外键没有赋值。rnrn问题:如何不让hibernate建立外键,但是又能保证关系表与三个表的关系呢?rnrn急急,我的qq:840194971
Hibernate多对多关系
Hibernate多对多关系
三张表的多对多关系
三张表rn(学生表 stuid PK classid FK)rn(老师表 teaid PK collegeid FK)rn(课程表 couid PK collegeid FK)rnrn辅助表rn(班级表 classid PK collegeid FK)rn(学院表 collegeid PK)rnrn现在需要建立三张表之间相互的多对多关系:rn一个学生多个课程rn一个学生多个老师rn一个课程多个学生rn一个课程多个老师rn一个老师多个学生rn一个老师多个课程rnrn想要实现的功能是 可以查询:rn1:学生选修课可以自己选定指定老师的某个课程rn2:必修课管理员维护指定某个班级修哪些必修课rn3:学生可以查询上的课程信息(课程名 任课老师 分数)rn4:老师需要查询任教的某个课程有哪些学生 并给他们打分rnrn自己的决绝方案:rn方案一:rn建立一张(中间表 mid PK teaid FK stuid FK couid FK)rn结果:这样维护起来非常麻烦,很多功能无法实现 例如学生选择选修课 选择项无法维护,老师和课程表没有直接建立关系rnrn方案二:rn建立两张关系表rn任课表(table1 t1 PK teaid FK couid FK )rn选课表(table2 t1 FK stuid FK 联合主键 score)rn结果:这样可以解决功能1,3,4 但是必修课难道要管理员一个学生一门课的一个个的维护?感觉很不合理rn疑问:这样的表关系不知道Hibernate 关系会是如何的的,还有任课表还能叫关系表?感觉就是两个普通的外键rnrn方案三(方案二的改进):rn再增加一个表 (table3 classid FK t1 FK 联合主键)rn疑问:个人感觉这样是可行的,必修课 学生表和table3都有classid的公共属性,这样同一个班的同学必修课通过table3可以映射到。但是还是同2 hibernate处理映射关系不知道能否可行???????(重点解疑)两外貌似必修课分数没地方安放了rnrn方案四 网上的,但是不能解决我的需求rn两张关系表 rn学生和课程建一个关系表维护多对多关系rn课程和老师建一个关系表维护多对多关系rn结果:这样学生上的某个课程老师就未知了,对照需求还有功能也不能维护rnrn
hibernated多对多关系原理
1 我这里以书本表和类别表为例 一定义好桥接表,分别是书本,类别表的外键 session.get(Book.class,1)-&amp;gt; select*from t_hibernate_book where book_id=?(1) resultSet-&amp;gt; 1 西游记 50 Book b=Class.forName(“com.zking.hibernate.entity.Book”).ne...
hibernate 多对多关系(一)
什么是多对多关系呢? 关系数据库中两个表之间的一种关系, 该关系中第一个表中的一个行可以与第二个表中的一个或多个行相关。第二个表中的一个行也可以与第一个表中的一个或多个行相关。 比如在常见的订单管理数据库当中“产品”表和“订单”表之间的关系。单个订单中可以包含多个产品。另一方面,一个产品可能出现在多个订单中。 要表示多对多关系,就妖创建第三个表,称为 联接表,也称( 桥接表、中间表)。它多对多关系...
相关热词 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法 c# gmail 发邮件 c# 多层文件