现在有一个项目,数据库里有这么几张表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,这样写可以吗?或者有没有别的什么办法来进行关联.期待高手..................有高手看不明白的请提问,我会进一步说明,项目紧张,急需合理的解答,谢谢.

解决方案 »

  1.   

    貌似hibernate的解析是以最后一次为准,就是
    <many-to-one name="bookInfo" class="com.resoft.bms.tsgl.domain.BookInfo" column="data_id" insert="false" update="false">
    </many-to-one>
    前面的都被覆盖了
    而且hibernate的电子档也没有这种关联关系的范例。应该是不能关联吧
      

  2.   

    hibernate不限制在一条select语句中多对一连接的数目
      

  3.   

    把数据库中的外键去了,没有外键难道表之间就没有关系吗???数据库中的外键往往还会带来很多麻烦,所以表之间的关系由POJO来关联......
    你上面写的那些对应关系有点问题,sysstat是总表,它里面可以有多个不同或相同的book_info,article_info,consultation_info,所以sysstat与那三个表的对应关系是三个<one-to-many>,而不是<many-to-one>,而且你那sysstat的主键设得也有点问题~~~
    自己再多动动脑想想看吧~~~
      

  4.   

    可能我说得还是有些不清楚,那我就说说我要做什么吧.
    因为用户提了一个求就是对查询出的结果做按访问量的排序,访问量的信息是记录在sysstat表中的,我现在想做的就是做个联接查询,查询出对应的访问量.
    这里有一个问题就是每一条数据只有起码被点击过一次后才在sysstat中产生记录.所以我要做个外连接.比如,在bookinfo表中有三条记录,book1,book2,book3,其中只有book1被点击过一次,也就是在sysstat中产生了一条记录,这条记录的data_id字段保存了book1的main_id,也就是bookinfo的main_id与sysstat的data_id这间来关联.
    进行bookinfo与sysstat的左外连接查询,我想要的是间生下面的结果.
    字段只写了主要的,其它省略.    |   bookinfo表  |      sysstat表     |       
    字段:bookid .....    data_id     data_sum
    数据:book1            book1          1
         book2            book2         null
         book3            book3         null
      

  5.   

    你要建一个sysstat表来关联,光只有data_id和data_sum这两个字段应该是不行的,因为sysstat表是同时对应着3张表,你要使sysstat对应那三张表无非是取他们的主键,但是取出来的主键是哪张表的主键呢???而且还可能有重复的~! 所以应当还要有一个字段来记录sysstat从三张表取出来的记录是哪个表的记录,不防给它起个名字叫tablename, 为了避免联合主键,不防再加一个字段sysstat_id做为主键,那么它就是你想让那三张表所映射的字段了,理论上好象是这样来的,但是实际上是不行的,怎么能在一个字段上同时对应3个字段呢~!!!所以数据库的表这样设计是不合理的。所以你要不就不要用Hibernate,要不就改数据库中的表.....有点让我不太明白的是既能是查询记录的访问量,你在那三张表的中再加一个字段(data_sum)不就完了吗?sysstat这样的表是不必要的,或许说这样的表是用sql执行出来的表,如果是用户强求的话,那么我想只能是上面所说的那样的表,这样的表是不可以用Hibernate映射的~~~
      

  6.   

    或许本人对Hibernate还有的地方还没有研究到~~~