本帖最后由 niuzk0411 于 2011-07-08 09:55:19 编辑

解决方案 »

  1.   

    你怎么article对article_count时是<one-to-one>,article_count对article又写成<many-to-one>你到底是一对一关系,还是一对多(多对一)关系啊?如果是一对一就用<one-to-one>,对多就<set>
      

  2.   

    另外我试了下 
    Person<?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping package="com.me.blog.bean">
        <class name="Person" table="person">
            <id name="id" type="java.lang.Integer">
                <column name="ID" />
                <generator class="native" />
            </id>
            <property name="name" type="java.lang.String">
                <column name="name" length="0" />
            </property>
             <one-to-one name="idcard" property-ref="person" cascade="all"></one-to-one>
        </class>
    </hibernate-mapping>IdCard<?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping package="com.me.blog.bean">
        <class name="Idcard" table="idcard">
            <id name="id" type="java.lang.Integer">
                <column name="id" />
                <generator class="native" />
            </id>
            <property name="idCard" type="java.lang.String">
                <column name="idCard" length="0" />
            </property>
          <many-to-one name="person" column="personId" unique="true"   />
        </class>
    </hibernate-mapping>
    查询了下列表
    结果hibernate
     Hibernate: select person0_.ID as ID62_, person0_.name as name62_ from person person0_ limit ?
    Hibernate: select idcard0_.id as id61_0_, idcard0_.idCard as idCard61_0_, idcard0_.personId as personId61_0_ from idcard idcard0_ where idcard0_.personId=?
    Hibernate: select idcard0_.id as id61_0_, idcard0_.idCard as idCard61_0_, idcard0_.personId as personId61_0_ from idcard idcard0_ where idcard0_.personId=?
    Hibernate: select idcard0_.id as id61_0_, idcard0_.idCard as idCard61_0_, idcard0_.personId as personId61_0_ from idcard idcard0_ where idcard0_.personId=?
    Hibernate: select count(person0_.ID) as col_0_0_ from person person0_
    这也太可怕了,主表查询一条where 有一万的记录 岂不是 从表也要查询 1w个查询
    请问该怎么优化下~ 谢谢!!!
      

  3.   

    个人观点,首先我看lz怎么还有select * 这样的东西出现呢,*是一个查询大忌啊,而且我觉得hibernate将表和表之间的关系绑的太死了,一般应该是不会做表关联的,在程序这边处理起来还是非常方便。。
      

  4.   

    首先你这个是用MyEclipse倒出来的对吧。你在数据库中A表持有了B那么A的映射文件就是one-to-one
    但是B又没有持有A那么B的映射就是many-to-one因为B不确定是有一个A持有它还是多个按楼主的意思是想做双向一对一在数据库中B也要关联到A
      

  5.   

    把你的查询方法贴出来,估计是查询时候方法有问题,这个有点类似list和iterator的问题
      

  6.   

    http://www.blogjava.net/lzn1446/articles/339558.html看下这个也许有点帮助