那种基于主键id的我知道。如果是一对多的,从多的list里删除一个元素,hibernate是如何知道删除的是哪个的呢?难道此时的list是hibernate自己定义的特殊List子类?
另外如果关联的一个元素里的某个字段修改了,他是如何知道是哪个元素发生变化了呢?

解决方案 »

  1.   

    它当然不知道了,因为不管你改没改,它反正每个字段都会重新 SET 一遍
      

  2.   

    你说的我知道,这是针对一个对象的字段。我说的事如果对象A包含关联属性B 的list,从list里remove一个对象,最后B相对A的关联就会少一个的(当然此时A是持久太)。
      

  3.   

    还真不知道hibernate是怎么处理的,你可以考虑下你遇到这个问题会怎么处理呢!
    你可以去找找hibernate的源码看看
      

  4.   

    这时应该看那方是主控方,那方是被控方. inverse属性决定。如果没有设置,它是不会有反应的
      

  5.   

    这可能是hibernate的三种状态的原因吧!
    hibernate有三种状态,瞬时,持久,游离。
    当你在事务中操作查询出了数据库中的数据,那么现在就是持久状态,集合中的数据和数据库中的数据是一一对应的!所以只要你对查出来的数据增删改查,改变了它,所以同样会影响到数据库中!
      

  6.   

    我貌似知道原因了,估计是session缓存的原因吧(一级缓存),持久态对象本身和session关联,因此持久态更新时会和缓存中的比较吧。
      

  7.   

    也可以这么说吧,只要session缓存中有一个对象,或一个集合与数据库的对象或者集合数据一一对应,就是持久状态,所以哪边改动,另一边跟着改!