b******e 发帖数: 1861 | 1 现在碰到一个问题,
我有两个entity classes通过many to many association联系在一起。在schema上是三
个表,两个主table,一个association table。
It looks like this.
Student table
student id, other columns
student_class table
student id, class id, class name
class table
class id, other columns
class Student
{
long studentId;
other fields.
Map classMap;
}
class Class
{
long classId;
other fields.
}
some generator class
>
现在当我新建一个student,并加入class到classMap,存到数据库没有问题,但是当我
update student(student本身没有变化),并加了一新的class到classMap里再存,新
的class根本没有被存到table,我打开show sql,发现根本没有insert到student_
class, class这两个tables的statement。高手给看看这可能是什么原因? | J*******n 发帖数: 2901 | 2 no exception?
会不会是你打算update student的时候,先把student取出来的那个session已经close
了,而update的时候却没有用merge() | b******e 发帖数: 1861 | 3 不是,问题解决了,是flush的问题。session只管理parent object student,由于
parent object已经persist了,所以update时session只是把它放到update queue里,
并不忙上同步数据库,因此child object class的key generator没有被执行,由于我
们在transaction里就要用到child object class的新产生的id,所以就出错了,暂时的
解决方案就是update后马上flush。
不知道有没有办法在mapping file里配置只对某一个entity auto flush.
close
【在 J*******n 的大作中提到】 : no exception? : 会不会是你打算update student的时候,先把student取出来的那个session已经close : 了,而update的时候却没有用merge()
| q***s 发帖数: 2243 | 4 是不是可以先保存下class,然后再关联到student中去。 | b******e 发帖数: 1861 | 5 这样也可以,不过不方便,还要自己去管理删除,更新,添加每一个class.
【在 q***s 的大作中提到】 : 是不是可以先保存下class,然后再关联到student中去。
|
|