现在有一个项目,数据库里有这么几张表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,这样写可以吗?或者有没有别的什么办法来进行关联.期待高手..................有高手看不明白的请提问,我会进一步说明,项目紧张,急需合理的解答,谢谢.
<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,这样写可以吗?或者有没有别的什么办法来进行关联.期待高手..................有高手看不明白的请提问,我会进一步说明,项目紧张,急需合理的解答,谢谢.
<many-to-one name="bookInfo" class="com.resoft.bms.tsgl.domain.BookInfo" column="data_id" insert="false" update="false">
</many-to-one>
前面的都被覆盖了
而且hibernate的电子档也没有这种关联关系的范例。应该是不能关联吧
你上面写的那些对应关系有点问题,sysstat是总表,它里面可以有多个不同或相同的book_info,article_info,consultation_info,所以sysstat与那三个表的对应关系是三个<one-to-many>,而不是<many-to-one>,而且你那sysstat的主键设得也有点问题~~~
自己再多动动脑想想看吧~~~
因为用户提了一个求就是对查询出的结果做按访问量的排序,访问量的信息是记录在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