给hibernate的Set增加死条件筛选

原创 2013年07月17日 17:58:16

参照Hibernate官方文档:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/collections.html


之前用Hibernate写的系统,其中有一个大家都在公用的附件表Appendix。A模块需要的附件存在这里,B模块需要的附件也存在这里,除了存A或B或C或D...模块的ID以外,还存一个table_name字段,用来区分是A、B、C、D中的哪一个。比如id=5, table_name='B',那么就代表id为5的B模块中的附件。

作为Hibernate的Newbie,只知道用一列映射,于是当初就是这么写的:

        <set name="appendixs">
            <key>
                <column name="id"/>
            </key>
            <one-to-many class="beans.Appendix"/>
        </set>

然后再在程序里用java手动去过滤它们……= =

但是后来发现保存的时候斯巴达。保存的时候会把其他连带的也覆盖掉了。比如id为5的B的附件全删除了,我就b.setAppendixs(null); 这一写不要紧,id为5的A、C、D中的附件也全都消失了……最要命的是这项目已经在客户那边上线了,还要做大手术是风险很高的……Leader告诉我慢慢改,改了出了问题再说(囧。

我实在是不甘心,觉得应该有其他的更优雅的解决方案的才对……查来查去,在Hibernate文档里终于找到了这货,where...

        <set name="appendixs" where="table_name='B'">
            <key>
                <column name="id"/>
            </key>
            <one-to-many class="beans.Appendix"/>
        </set>

这样写死就OK了。ABCD的hbm配置文件都改一下,只需要改配置就可以了。问题解决了。

如果不是写死,而是用动态的话……貌似得用filter标签什么的,就不太了解了。Hibernate的路,我还有很长要走啊……

Hibernate Set查询过虑

一个老师教许多学生,一个学生被许多老师教,一个学生有好多书,同一种书被许多同学拥有. 要查询教拥有书"a"的学生的老师!HQL如何写呀?如何取值? class teacher{ Strin...
  • dragonpeng2008
  • dragonpeng2008
  • 2016年08月19日 17:21
  • 340

hibernate Criteria 多对多查询

List ids = new ArrayList(); ids.add(1); ids.add(2); Criteria criteria = getSession().create...
  • justinytsoft
  • justinytsoft
  • 2017年10月24日 16:58
  • 152

Hibernate关系映射--双向一对多@OnToMany

1.无链接表的双向一对多 无链接表的双向一对多在一的一方用@OneToMany,在多的一方用@ManyToOne,同时用@JoinColumn来映射外键列 对于双向一对多的关联关系,通常一的一方要...
  • muyeju
  • muyeju
  • 2015年08月23日 00:59
  • 704

destoon供应模块增加房产筛选功能

先看看完成后的效果图: 下面一步步来实现这样的效果。 首先我们把这个筛选模块的html结构写出来,如下: 区域: ...
  • bl1988530
  • bl1988530
  • 2012年12月20日 21:35
  • 4453

hibernate one-to-many关联查询<set>中使用filter

我们将放在了Student的实体映射文件中,然后在College的实体映射文件中引用过滤器。经过我的验证,这样也是可以的。由此可以看出:是一个全局效果,无论放在哪儿个实体映射文件,效果都是一样的。有一...
  • aitangyong
  • aitangyong
  • 2016年01月10日 17:46
  • 2454

Python编程技巧-根据条件从list dict set中筛选数据

从列表list中筛选数据from random import randint# 生成由十个范围在-10 ~ 10 的数组成的list l = [randint(-10, 10) for _ in ra...
  • suibianba554
  • suibianba554
  • 2017年11月08日 22:53
  • 120

hibernate 多条件组合查询 之 sql 拼接

  publicstaticvoid main(String[] args) {              Session session = null;       Transaction tx =...
  • yunzhongfeiniao
  • yunzhongfeiniao
  • 2010年05月31日 21:23
  • 777

Hibernat 使用Criteria查询多对多关系(SET集合)条件

1.版块 module{   private Set moderators=new HashSet(); } 版主 moderator{ private Set modules=new H...
  • wconvey
  • wconvey
  • 2014年11月29日 10:30
  • 2577

prometheus+grafana实现筛选项关联查询

配置grafana连接prometheus后,使用prometheus的模板可以实现对图表的筛选,但如何通过前面选择条件关联查询后边的查询条件呢? 想到模板变量,是否可以在查询生产模板变量值时使用...
  • wwwasw
  • wwwasw
  • 2017年09月16日 19:40
  • 473

hibernate 多条件与查询:Restrictions

hibernate 多条件与查询:Restrictions
  • cocoaxian
  • cocoaxian
  • 2016年08月23日 15:36
  • 2155
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:给hibernate的Set增加死条件筛选
举报原因:
原因补充:

(最多只允许输入30个字)