У меня есть настройка отображения Hibernate. Таблица видов, мой Java-класс видов. hibernate.cfg.xml указывает на сопоставления в видов.hbn.xml
В моем коде я использую простой HQL-запрос, а затем выбрасываю полученные экземпляры Species в класс "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 выглядит следующим образом:
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)
)
видов.hbn.xml выглядит так:
<?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>
Мой экземпляр SpeciesLister получает полный список ожидаемого количества экземпляров Species. Однако, когда я проверяю полученные экземпляры Species, все их поля имеют значение null, кроме id (long), все остальные, такие как familyName, latinName, commonName, все равны null в сопоставленном объекте.
Это неожиданно, и я не могу понять, почему это происходит. Я делаю что-то неправильно?
Я с подозрением отношусь к двум вещам, но я не уверен, что с ними делать:
Я думаю, что тот факт, что id устанавливается как свойство, а не другие строковые поля, может быть подсказкой.
Я подозреваю, что что-то не так с тем, как я приводил объекты в список экземпляров Species.