我们做一些大的项目时,都会有很多实体类,用Annotation注释这些实体类,但是这些实体类之间有可能有映射关系,比如一对多,多对一等等,我一般就只在多的一端注释ManyToOne,这是可行的,但是如果删除一的一方,那么多的一方也需要自动删除,那么就需要在一的一方也需要注释OneToMany,这也是可行的,我的问题是:如果有很多实体与某一个实体有多对一的关系,那么如果双方全都注释,那么运行效率是很低的,请问如何改善?

解决方案 »

  1.   

    “但是如果删除一的一方,那么多的一方也需要自动删除”,这个加不加OneToMany没有关系,这只是维护外键的完整性。
    你在两边都加了OneToMany和ManyToOne,实际上数据库里的结构还是基于外键的关联。双向关联只是在用java对象读取关联对象时方便点。
    而且,设置双向关联后,你应该在OneToMany上设置mappedBy,让多的一方维护关联,这样就不会有冗余字段了
      

  2.   

    “设置双向关联后,你应该在OneToMany上设置mappedBy,让多的一方维护关联”,我确实在OneToMany上加了mappedBy,但是运行时,它会扫描每个包找出映射关系,如果一的一方的映射关系太多,那么速度就慢了啊,如果在一的一方不注释相关联的多的一方,只在多的一方加注释,那么删除一的一方时,相关联的多的一方会自动删除吗?
      

  3.   

    这与SSH扯上啥关系啦,只是简答的HIBERNATE而已。。在ManyToOne的SET那里加级联标签就解决了啊,,。。