SSH中hibernate双向多对多的添加问题,如何只在中间表插入数据?

J2EE 码拜 7年前 (2015-05-10) 1217次浏览 0个评论

areas(表一)     plants(表2)   areas_plants(关联表)用的mysql数据库
3张表的id在配置文件中都配置的native,
添加areas和plants的时候会自动把areas_id和plants_id添加到关联表中。
我添加areas和plants不想让数据中出现重复记录,但是关联表中我想体现出areas和plants的多对多的关系。请牛人回答我该怎么设计。例如:areas中有a1,a2,a3这三条记录,plants中有p1,p2,p3这三条记录,我想让areas_plants中有9条记录(a1,p1   a1,p2    a1,p3  此处省略其他6种)。看明白的回复,有满意答案马上结贴。

60分
首先你确定哪一方是关系维护段吗? 这两个实体里都肯定有对方的集合,你对关系维护段操作集合的时候就会自动添加中间表的值。
我的两个实体里没有对方的集合,没有<many-to-many>这个标签,而是把areas_plants放到了两端的集合里,然后转化成了两个一对多,多的一方是areas_plants这个表,在两个实体的映射xml中设置的是<one-to-many>对应的是areas_plants表里的两个实体的id;然后实体xml设置了级联操作,inverse=”false”也是在两个实体映射xml里设置的,保存的时候保存两个实体,因为设置了级联所以实体id会自动保存到areas_plants里,我在数据库里手动添加了我上面举的例子,用hql能查出来,9条记录没问题,我不知道我这种方式是不是错了。苦恼ing。
    两边各一对
     <set casecade=””>
      <key/>
      <many-to-many/>
    </set>   中间表是自动生成的
等于木有说~~关于实体表中重复添加的问题用java代码控制还是hibernate有自己的机制可以控制?请各位盆友从这方面考虑啊。
别沉了啊!
引用 3 楼 shxt_xiaozhi 的回复:

    两边各一对
     <set casecade=””>
      <key/>
      <many-to-many/>
    </set>   中间表是自动生成的

你的这种方式没有中间的实体表你怎么查···哈哈

areas和plants这两个实体类,哪个是主动的一方,
如果plants是主动的一方,那就在areas的hibernate配置文件中配置<set name=”” table=”” inverse=”true”>让areas放弃对外键的维护权。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明SSH中hibernate双向多对多的添加问题,如何只在中间表插入数据?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!