父对象:Business.java
package com.workFlow.bean;import java.io.Serializable;
import java.util.*;public class Business implements Serializable{
    private Long id;
    private String name;
    private List actions = null;
  public List getActions() {
    return actions;
  }
  public void setActions(List actions) {
    this.actions = actions;
  }
  public Long getId() {
    return id;
  }
  public void setId(Long id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
}Business.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
 <class name="com.workFlow.bean.Business" table="TF_Business">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
  <list cascade="all" lazy="true" name="actions">
   <key column="business_Id"/>
   <index column="id"/>
   <one-to-many class="com.workFlow.bean.Action"/>
  </list>
 </class>
</hibernate-mapping>子对象:Action.java
package com.workFlow.bean;import java.io.Serializable;
import java.util.*;public class Action
    implements Serializable {
  private Long id;
  private String name;
  private int business_Id;  private List actionStates = null;
  public int getBusiness_Id() {
    return business_Id;
  }  public void setBusiness_Id(int business_Id) {
    this.business_Id = business_Id;
  }  public Long getId() {
    return id;
  }  public void setId(Long id) {
    this.id = id;
  }  public String getName() {
    return name;
  }  public void setName(String name) {
    this.name = name;
  }  public List getActionStates() {
    return actionStates;
  }  public void setActionStates(List actionStates) {
    this.actionStates = actionStates;
  }}
Action.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
 <class name="com.workFlow.bean.Action" table="TF_Action">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/> </class>
</hibernate-mapping>数据访问接口:BusinessManagerImpl.java
package com.workFlow.manager.impl;import com.workFlow.bean.*;
import com.workFlow.manager.BusinessManager;import org.springframework.orm.hibernate.support.HibernateDaoSupport;import java.io.Serializable;import java.util.List;
/**
 * DOCUMENT ME!
 *
 * @author wjj
 */
public class BusinessManagerImpl extends HibernateDaoSupport
    implements BusinessManager {
    //~ Methods ----------------------------------------------------------------
  ........
  ........
    /*
     * (non-Javadoc)
     *
     * @see BusinessManager#loadBusinessById(java.io.Serializable)
     */
    public Business loadBusinessById(Serializable id) {
        return (Business) getHibernateTemplate().load(Business.class, id);
    }
......
}当测试执行 loadBusinessById(Serializable id)方法后,读数据库正常,但buiness.getActions()的list数组应该只有3个Action对象,但后来发现有5个,其中第0和第2对象为"null",但buiness.getActions().size()等于5不是3了,这是怎么回事?环境是hibernate2.17 jtds1.1 spring1.1.2

解决方案 »

  1.   

    我在sql server上,Enterprise Manager手工加减数据后,发现返回对象数据有这回事,但集合类没有,不知楼主用的什么数据库?不过这个问题也简单,做一下null判断就好了。
      

  2.   

    我用的是sqlserver 2000 ,其实代码做个判断可行,我只是对这种现象的出现比较纳闷,出现很多次了,还望指教啊...
      

  3.   

    private List actions = null;
    中的=null去掉去看看。
      

  4.   

    最好是private List actions = new ArrayList();
      

  5.   

    不要用List做一对多的关联,因为List允许有重复的对象存在,用Set就没事了。
      

  6.   

    List应该是= new ArrayList();而不应该= null;