you know!hibernate 多对多的时候,中间表记录是自动生成的。但是如果我要在中间表需要加入一个“是否有效”字段active。,还有些其他字段。
1。取出记录的时候,默认显示的是所有关联的有效的记录
2。增加的时候加入相关信息
3。我并不要直接删除。在删除的时候只让它变为无效字段。请问这种情况是否能用多对多的映射。很失望,没有查到相关的文档介绍有关在中间表生成和删除的时候可以变得灵活点,对hibernate也是不太熟悉,简单用用可以。所以上来问问。之前没有实际用过多对多,只是学习时测试过。还请大家指点,或者数据库设计有什么问题?
1。取出记录的时候,默认显示的是所有关联的有效的记录
2。增加的时候加入相关信息
3。我并不要直接删除。在删除的时候只让它变为无效字段。请问这种情况是否能用多对多的映射。很失望,没有查到相关的文档介绍有关在中间表生成和删除的时候可以变得灵活点,对hibernate也是不太熟悉,简单用用可以。所以上来问问。之前没有实际用过多对多,只是学习时测试过。还请大家指点,或者数据库设计有什么问题?
真实的多对多很少,往往在关联信息中需要保存更多的信息。
这时候就不能用多对多了。
应该用双向的一对多来实现,就是 A和B多对多,那么需要一个中间对象比如为C
就是A和C是一对多,
然后B和C也是一对多。
在C中就同时引用A和B,同时加入你想要的其它属性。最后,因为你并不真正删除中间数据,所以需要特别的方法取得没有被删除的数据,就是对数据作一个过滤。
没有深入了解
呵呵
关注学习一下
找到。如果a.getCs()之后然后自己写循环过滤吧,感觉那样效率低下。自己写sql直接session执行吧,配置一对多、多对多的,感觉就没有意义了。哎。有没有其他的方法?
你应该创建一个中间表的对象,比如刚才说的C
然后在A和B里面创建一个方法
叫做,getCVAlidList()//取得有效的c列表,这个使用session.createQuery实现
这样就能够达到你的过滤的目的,在这种情况下,记住:
永远不要调用,原来的getCList,因为这个调用没有意义(删除的和未删除的都在里面),不需要将cList取出再过滤,这样太浪费了。
或者this.getSession().createQuery()。这两种方法调用sql的。
如果这样,不配置映射文件也可以通过sql实现。感觉配置就成多余了,不知道我的理解对不对。
我就是想效率高点。hibernate也不清楚到底怎么用效率才高。哎,效率是个很让人烦的话题,我资历浅,功能实现都没有问题,就是谈到效率我就头疼了。谢谢你的回答。先实现的再说了。