一张合同表 一张样品表 一对多关系
现在碰到的问题是每次查询样品表都会把合同也一起查出来 
但是查合同就不会拉出样品
hibernate配置是这样的 请大家帮我看看有什么问题
合同
<class lazy="true" name="com.test.webapp.model.Contract" table="t_contract">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="contractId" type="java.lang.String">
            <column name="contract_id" length="25" unique="true" not-null="true" />
        </property>
        <set name="contractSamples" inverse="true">
            <key column="contract_id" property-ref="contractId" not-null="true" />
            <one-to-many class="com.test.webapp.model..LimsDeteContractSample" />
        </set>
    </class>
样品
<class lazy="true" name="com.test.webapp.model.ContractSample" table="t_contract_sample">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="contractSampleId" type="java.lang.String">
            <column name="contract_sample_id" length="25" unique="true" not-null="true" />
        </property>
       
        <many-to-one name="contract" property-ref="contractId" class="com.test.webapp.model.Contract" lazy="proxy">
            <column name="contract_id" length="25" not-null="true" />
        </many-to-one>
    </class>
我想是不是因为外键的关系 对应的不是合同的id 而是contractId

解决方案 »

  1.   

    对不起 那个class应该是class="com.test.webapp.model.ContractSample"
      

  2.   

    合同
    <set name="contractSamples" inverse="true">
      <key column="contract_id" property-ref="contract" not-null="true" />
      <one-to-many class="com.test.webapp.model..LimsDeteContractSample" />
      </set>样品
    <many-to-one name="contract" class="com.test.webapp.model.Contract" lazy="proxy">
      <column name="contract_id" length="25" not-null="true" />
      </many-to-one>试一下吧
      

  3.   

    额 请问能不改property-ref么?因为是别人写的
      

  4.   

    其实你的<one-to-many >里面的class已经指明了是哪个表来引用当前表的主键
      

  5.   

    现在样品表也就是儿子表的外键是指向合同表就是父亲表的contractId字段的 并不是合同表的id字段
    那样改的话是不是还是这样?
      

  6.   

    真实数据存进去以后看数据库是这样的
    样品表中的外键是指向合同表的contractId的 
    但是合同表的主键是id
    并不是contractId
    所以并不是你说的样品表的外键指向合同表的主键
      

  7.   

    你合同表的主键的名字设置的是id在合同表里面显示的当然也是id
      

  8.   

    对的 在合同表里的主键确实是id
    但是样品表里的外键并不是指向合同表的id的
    而是contractId
    是不是这个原因才导致了lazy失效?
    迷惑
    因为另外一个系统所有的外键都用了id
    lazy是没问题的
      

  9.   

    ublic String insertCountDown(String request){...CountDown cd = new JSONDeserializer<CountDown>().use(null, CountDown.class).use("holidayType",HolidayType.class).deserialize(request);return         cdm.insertCountDown(cd);}
    (2)JAVA示例代码-使用ObjectBinderpublic String insertCountDown(Map request) {...request.put("class", CountDown.class.getName());Map dayType = (Map)request.get("dayType");dayType.put("class", HolidayType.class.getName());
    ObjectBinder binderCountDown = new ObjectBinder();CountDown cd = (CountDown) binderCountDown.bind(request);        
    ObjectBinder binderHolidayType = new ObjectBinder();HolidayType ht = (HolidayType)binderHolidayType.bind(dayType);return         cdm.insertCountDown(cd);}
      

  10.   

    这样lazy应该是没用的。在运行时没有抛异常吗
      

  11.   

    hibernate的级联查询貌似一定要是外键引用的是另一张表的主键
      

  12.   

    这个问题我原来也碰到过...
    只需要给你的主表..也就是一对多的一表中...加一个lazy=‘false’就解决了..
      

  13.   

    父亲端加lazy='false'就更不对了 全都查出来了
      

  14.   

    恩 对的 是双向关联 把property-ref去掉确实是可以lazy了 但是现在改已经不可能了...
      

  15.   

    为什么双向关联就会?因为系统已经做得差不多了 一开始设计都是别人做的 
    我只是个小小的coding人员...
      

  16.   

    看这个名称就知道了呀,“双向”。
    你的实体类里面有对方对象的set方法
      

  17.   

    额 没明白 两个类里面都有set get方法 为什么只有查儿子的时候把父亲拉出来 查父亲的时候没把儿子拉出来?难道儿子和父亲太好了非要一起出来么
      

  18.   

    你合同的映射文件中的<set ........>里面的lazy是true的话,你在查询出合同后再查看样品时hibernate才会从数据库中去查询;如果lazy是false的话,在查询合同的时候就会查询出样品
      

  19.   

    现在合同<set>里的lazy是true的 所以不会把样品也查出来
      

  20.   

    额按照这么理解的话不就多的那一端没有lazy的概念了么 怎么样都会查出来 但事实不是这样