2 dingchao823 dingchao823 于 2016.04.21 21:18 提问

[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个回答

dingchao823
dingchao823   2016.04.21 21:22

中间的被吞掉了,我重新发一下
**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**

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

dingchao823
dingchao823   2016.04.21 21:29

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
sqlalchemy中多对多的关系
一、sqlalchemy数据库中多对多的关系,主要有下面三个步骤 定义一个中间表保存两个表的主键 定义多对多关系的两个表的模型 给每个模型都添加一个访问对方的属性注意在relationship中指定中间表 二、代码如下:# coding:utf-8 from sqlalchemy import create_engine, Column, String, Integer, ForeignKey, T
EF Codefirst 多对多关系 操作中间表的 增删改查(CRUD)
前言 此文章只是为了给新手程序员,和经验不多的程序员,在学习ef和lambada表达式的过程中可能遇到的问题。 本次使用订单表和员工表建立多对多关系。 首先是订单表: public class Order { public int OrderId { get; set; } public string OrderTitle {
Hibernate 多对多之拆分中间表增加有多个关系字段
Hibernate多对多关系中间表有其他属性的配置方式 一、需求原因         在我做系统架构时遇到情况是这样:资源菜单实体类(Resource)和角色实体类(Role)是多对多关系,需要各个角色可以个性化自己的资源菜单顺序。 二、设计理念 多对多的关系拆分为两个一对多(以下为关系映射图) 三、具体配置 方式一:XML方式 Role实体 public class Ro
MVC5多对多关系生成的中间表添加新字段
ASP.NET的MVC5的多对多关系在model层可以轻松表示出来,但也许你会碰到和我一样的问题,即我们需要在中间表添加字段来更方便我们的业务逻辑的实现或者说让我们的数据库设计显得更加合理。我们使用codefirst方式生成数据库可以以以下方式替换。 多对多关系的两张表所建的model类文件分别是Group.cs和Member.cs,其中间表生成的类文件为MemberGroup.cs。其代码如下
Entity Framework 4.1 之五:多对多的关系
这篇文章讨论多对多的关系。 让我们从最简单的例子开始。我们让 EF4.1 来推断表的映射。我在订单和雇员之间建模多对多的关系。 publicclass Order { publicint OrderID { get; set; } [Required] [StringLength(32, MinimumLength =2)] publicstring Or
Mybatis 多对多表关联
中间表实现  下面的例子让新手看不错。可以改进的一点是           1、不必建立 关联对象实体,可以用map传递两个id进去           2、文章的resultMap 继承和 查询配置 比较清楚,可以借鉴         mybatis3.0添加了association和collection标签专门用于对多个相关实体类数据进行级联查询,但仍不支持多
Ibatis的多对多关联
<br />我的MySql脚本为:<br />DROP TABLE IF EXISTS `student`;<br />create table student(<br />           student_id  VARCHAR(100) PRIMARY KEY,<br />           student_name VARCHAR(100)<br />);<br />DROP TABLE IF EXISTS `teacher`;<br />create table teacher(<br /> 
范例讲解:多对多的关系
实例要求: 1. 一个学生可选多门课程,一门课程可以有多个学生参加,那么这就是一个典型的多对多关系。 2.要完成本程序,首先应该定义两个类,学生信息类Student、课程信息类Course,在一个学生 类中存在一个集合,保存全部的课程,而在谭程类中要存在一个集合,保存全部的学生。   课程类: import java.util.List ; import java.util.ArrayL
SSH框架下多对多关联关系表的管理中遇到的问题和解决办法
    在应用系统最常用的用户与角色管理中,存在多对多关系,一个用户可以拥有多个角色,一个角色可以拥有多个角色,一般设计三个表格,用户表,角色表,和用户-角色表,在用户bean中增加private Set roleSet=new HashSet();角色bean中增加private Set userSet=new HashSet();    user.hbm.xml中增加    casca
关于数据表多对多关联的理解
多对多的情况需要借助第三张表中间表middle来进行查询 中间表middle有如下字段 id,picture_id,product_id 两个需要多对多关联的表为picture,product表 这样product表只需查询中间表middle就能找所有指定product_id的picture_id 再通过查询到picture_id 去找到指定图片。 同样要知道一张图片属于哪些商品 只需