日期:2014-05-18  浏览次数:20582 次

有关一个hibernate关联查询的问题.
现在有一个项目,数据库里有这么几张表

book_info,article_info,consultation_info这三张表分别叫做书籍信息表,期刊文章信息表,资讯信息表,记录三种不同数据的基本信息.

另外有一张表叫sysstat,上面三种数据在被访问过一次后,就会在此表中保留信息,这个表有一个data_id字段来关联它所记录的数据,另有一个字段叫data_sum,是用来记录数据的访问量的...

现在是重点,我想通过hibernate的hql进行外连接查询上面三个表的数据,要关联上sysstat表中它所对应的访问量这个字段的数据来使用.

我现在的想法是在映射文件中做配置,但有了一个问题,就是sysstat中会出现一个字段的多个 <many-to-one> .我把写的配置文件贴出来.

hibernate-mapping>
        <class   name= "com.thinkroc.cpub.domain.SysStat "   table= "CPUB_T_SYS_STAT "   lazy= "false ">
                <id   name= "mainId "   type= "java.lang.String ">
                        <column   name= "MAIN_ID "   length= "50 "   />
                        <generator   class= "assigned "> </generator>
                </id>
..................省略中间的属性配置
<many-to-one   name= "articleInfo "   class= "com.resoft.bms.qkgl.domain.ArticleInfo "   column= "data_id "   insert= "false "   update= "false "   >
</many-to-one>
<many-to-one   name= "consultationInfo "   class= "com.resoft.bms.zxgl.domain.ConsultationInfo "   column= "data_id "   insert= "false "   update= "false ">
</many-to-one>  
<many-to-one   name= "bookInfo "   class= "com.resoft.bms.tsgl.domain.BookInfo "   column= "data_id "   insert= "false "   update= "false ">
</many-to-one>

注意看下面的 <many-to-one> 配置,sysstat的data_id,作为外键关联多个实体bookInfo,articleInfo,consultationInfo中的主键main_id,这样写可以吗?或者有没有别的什么办法来进行关联.

期待高手..................

有高手看不明白的请提问,我会进一步说明,项目紧张,急需合理的解答,谢谢.

------解决方案--------------------
貌似hibernate的解析是以最后一次为准,就是
<many-to-one name= "bookInfo " class= "com.resoft.bms.tsgl.domain.BookInfo " column= "data_id " insert= "false " update= "false ">
</many-to-one>
前面的都被覆盖了
而且hibernate的电子档也没有这种关联关系的范例。应该是不能关联吧
------解决方案--------------------
关注。。。帮顶~
------解决方案--------------------
hibernate不限制在一条select语句中多对一连接的数目
------解决方案--------------------
把数据库中的外键去了,没有外键难道表之间就没有关系吗???数据库中的外键往往还会带来很多麻烦,所以表之间的关系由POJO来关联......
你上面写的那些对应关系有点问题,sysstat是总表,它里面可以有多个不同或相同的book_info,article_info,consultation_info,所以sysstat与那三个表的对应关系是三个 <one-to-many> ,而不是 <many-to-one> ,而且你那sysstat的主键设得也有点问题~~~
自己再多动动脑想想看吧~~~