Java Hibernate映射返回空属性

Java Hibernate映射返回空属性,java,hibernate,Java,Hibernate,我有一个Hibernate映射设置。表是物种,我的Java类是物种。hibernate.cfg.xml指向species.hbn.xml中的映射 在我的代码中,我使用了一个简单的HQL查询,然后将生成的物种实例抛出到一个SpeciesLister类中,并将其传递到表示层 SpeciesLister speciesList = new SpeciesLister(); Query q = session.createQuery("SELECT s FROM Species s");

我有一个Hibernate映射设置。表是物种,我的Java类是物种。hibernate.cfg.xml指向species.hbn.xml中的映射

在我的代码中,我使用了一个简单的HQL查询,然后将生成的物种实例抛出到一个SpeciesLister类中,并将其传递到表示层

   SpeciesLister speciesList = new SpeciesLister();
    Query q = session.createQuery("SELECT s FROM Species s");
    for (Species s : (List<Species>) q.list()){
        speciesList.addSpecies(s);
    }
species.hbn.xml如下所示:

package springwildlife;

public class Species implements Serializable
{
    long id;
    String commonName;
    String latinName;
    String order;
    String family;
    ArrayList<Sighting> sightings;

    public Species()
    {
    }

    public Species(String commonName, String latinName)
    {
        sightings = new ArrayList<Sighting>();
        this.commonName = commonName;
        this.latinName = latinName;
    }

    public long getId()
    {
        return id;
    }

    public String getCommonName()
    {
        return commonName;
    }

    public String getLatinName()
    {
        return latinName;
    }
    public String getOrder()
    {
        return order;
    }
    public String getFamily()
    {
        return family;
    }
    public ArrayList<Sighting> getSightings()
    {
        return sightings;
    }

    public void addSighting(Sighting s)
    {
        sightings.add(s);
    }

    public void setId(long id)
    {
        this.id = id;
    }

    public void setCommonName(String cn)
    {
        commonName = cn;
    }

    public void setLatinName(String ln)
    {
        commonName = ln;
    }

    public void setFamily(String f)
    {
        family = f;
    }

    public void setOrder(String o)
    {
        order = o;
    }


}
CREATE TABLE species
(
  id serial NOT NULL,
  common_name text,
  latin_name text,
  order_name text,
  family_name text,
  CONSTRAINT id PRIMARY KEY (id)
)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class name="springwildlife.Species" table="species">
      <id name="id" type="java.lang.Long" column="id" >
          <generator class="native">
              <param name="sequence">species_id_seq</param>
          </generator>

  </id>

  <property name="commonName" type="java.lang.String">
   <column name="common_name" />
  </property>
  <property name="latinName" type="java.lang.String">
  <column name="latin_name"/>
  </property>
  <property name="order" type="java.lang.String">
  <column name="order_name"/>
  </property>
  <property name="family" type="java.lang.String">
  <column name="family_name"/>
  </property>
 </class>
</hibernate-mapping>
My SpeciesLister实例获取所有预期物种实例数的完整列表。但是,当我检查生成的物种实例时,除了id long之外,它们的所有字段都为null,其他所有字段(如familyName、latinName、commonName)在映射对象中都为null

这是出乎意料的,我不明白为什么会这样。我做错什么了吗

我对两件事表示怀疑,但我不确定该如何看待它们:

我认为id是属性集,而不是其他字符串字段这一事实可能是一个线索

我怀疑我将对象投射到物种实例列表中的方式可能有问题


代码看起来不错。如果不进入调试器,就很难确定,不过我的猜测是编译时类插装在构建中的某个地方。如果是这样的话,我见过这样的情况:在调用getter方法之前,对类中实际字段的赋值被延迟

因此,我建议您放置一些依赖getter来获取数据的print语句,而不是直接访问属性,然后查看打印的内容


最后,请在评论@Mark中的姓名前加上@sign。这样,您的通讯员将得到通知,您可能会更快得到回复

数据库中的字段是否也为NULL,或者它们是否设置正确,并且只有检索到的实例中的字段为NULL?您可能希望启用调试并查看生成了什么查询。然后您可以尝试直接在数据库中输入此查询,并查看结果。这会缩小范围。顺便问一下,你的SpeciesLister代码是什么?此外,您还可以将调试器断点放在添加种类的循环中,并查看Hibernate返回的对象是否正确。joe,数据库字段本身设置正确,正在生成的查询选择species0_u0.id为id0_0,species0_0.common_0名称为common2_0,species0_0.latin_0名称为latin3_0,species0_0.order_0名称为order4_0,species0_uu。family_u名称作为来自species0_u的family5_0_u正确执行并返回预期结果。