hibernate 多对多 问题。 急啊

来源:百度知道 编辑:UC知道 时间:2024/05/28 11:31:29
hibernate多对多的 问题, 三个表 , 一个中间关联表,以前学习hibernate的时候曾经做过 学习笔记,多对多的关系有个例子,里面的两个实体都是new 出来的,那样, 用主动方插入,就可以实现插入两个实体和关联表。 现在的问题是 我现在 new一个主动方实体,另一个实体是从数据库中获得, 那么用主动方插入的时候,只插入了主动方, 而且插入后会报错,什么 two session。 我hibernate封装用了 hibernateTemplate 也不存在事务问题吧。。 这怎么搞?

看来学习的时候没有总结全面啊 。。 这个问题昨天都卡了我一下午了

(注。配置没有问题。。。 我不从数据库查, new 出另外的实体可以插入三个表。。。 )
我是想 插入一个 主动方的实体的时候, 就可以实现和数据库中的 某些 实体进行多对多的关联,, 用双new 的方法就是 同时插入两个 实体 并为他们关联,这不是我想要实现的。。。

谢谢, 请不要 复制 粘贴,, 那样很丢人

? 拆成一对多? 我设计上就是 产品 和 配件 ,是多对多的关系, 一对多, 配件 拥有 外键? 那配件怎么和另外的 产品关联呢, 所以 好像 不能拆啊 ,如果在hibernate 中可以拆的话, 那么能不能所一下 思路? 那个多对多 中间关联表是必须要有的 啊 。。

假设表A与表B是多对多关系,A配置为主动方。

A a = new A(……);
B b = "从数据库中获得";
a.getBs().add(b);
b.getAs().add(a);
baseDao.create(a); //插入主动方实体a

这个思路你看行不行,不能直接就插入主动方实体a,要先add中间表的数据,而且两边都要,如上。如果你的配置没问题的话,这样插入应该是可以的。有问题再一起研究一下。

对了,补充一下,一般还是不要建立many-to-many的映射,自己手动建立一个中间表C,然后建立两个一对多的关系:A与C建立一对多的关系,B与C建立一对多的关系,插入数据的时候要两次create,虽然繁琐点,但是维护起来比较容易,个人见解,不对之处多多指教。

多对多的概念也是要拆成一对多再处理的吧!!

多对多关系本来就是要拆成两个一对多的关系来解决的吧。中间表用其他两个表的主键作为联合主键。不太明白你的意思。你是想插入其中一个对象的时候在3张表里面都会有数据吗?那样的话
A中将有个bList之类的属性,说明A可以拥有多个B类型。
A a = new A();
a.addB(用this.getHibernateTemplate找出B或者是new B());//把B加入bList中,有多个就addB多次,或者直接传入List等类型,这可以在你的addB方法里面控制.
之后保存A。
最后保存的时候记得用saveOrUpdate,不要用save.
配置hbm.xml文件中的many-to-many,
设置cascade="save-update"