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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!