Peclive jsem vse zkontroloval a opravdu mam namapovane vsechny sloupecky.
Mapovani sloupecku provadim pomoci anotaci v entite.
Konfigurace Hibernate projde. Pokud zakomentuji radek <mapping
class="entity.ZakazkaRozsirena"/>, tak vse funguje, pokud tam neni
zakomentovany, tak program spadne (Column name DTYPE not found in result
set) i kdyz entity ZakazkaRozsirena vubec v kodu nepouziju.
Takto vypada konfigurace Hibernate
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">
org.firebirdsql.jdbc.FBDriver
</property>
<property name="hibernate.connection.url">
jdbc:firebirdsql://cesta k db
</property>
<property name="hibernate.connection.username">
uzivatel
</property>
<property name="hibernate.connection.password">
heslo
</property>
<property
name="hibernate.dialect">org.hibernate.dialect.FirebirdDialect</property>
<!-- List of XML mapping files -->
<mapping class="entity.Zakazka"/>
<mapping class="entity.ZakazkaRozsirena"/>
</session-factory>
</hibernate-configuration>
Tabulka ZAKAZKY
ZAKAZKA integer
NAZEV varchar(20)
select * from ZAKAZKY
@Entity
@Table(name = "ZAKAZKY")
public class Zakazka implements Serializable {
@Id
@Column(name = "ZAKAZKA")
private Integer zakazka;
@Column(name = "NAZEV")
private String nazev;
public Zakazka () {
}
public Zakazka (Integer zakazka) {
this.zakazka = zakazka;
}
public Integer getZakazka () {
return zakazka;
}
public void setZakazka (Integer zakazka) {
this.zakazka = zakazka;
}
public String getZakazka () {
return zakazka;
}
public void setNazev (String nazev) {
this.nazev = nazev;
}
@Override
public int hashCode () {
int hash = 0;
hash += (pkid != null ? pkid.hashCode () : 0);
return hash;
}
@Override
public boolean equals (Object object) {
if (!(object instanceof Zakazka)) {
return false;
}
Zakazka other = (Zakazka) object;
if ((this.pkid == null && other.pkid != null) || (this.pkid !=
null && !this.pkid.equals (other.pkid))) {
return false;
}
return true;
}
@Override
public String toString () {
return "entity.Zakazka[pkid="+ pkid + "]";
}
}
select ZAKAZKY.*, (select max(OCENENI.CENA) from OCENENI where
OCENENI.ZAKAZKA = ZAKAZKY.ZAKAZKA) as MAX_CENA
from ZAK_ZAKAZKY
@Entity
public class ZakazkaRozsirena extends Zakazka implements Serializable {
@Column(name = "MAX_CENA")
private Double maxCena;
public MyTableExt () {
}
public Double getMaxCena () {
return maxCena;
}
public void setMaxCena (Double maxCena) {
this.maxCena = maxCena;
}
}
Jiri Mares napsal(a):
Dobry den,
protoze jste neuvedl jake mate mapovaci soubory pak velmi spatne muzeme
odhadnout kde je problem, ale rozhodne nebude v
kodu Hibernate, protoze pokud byste mel mapovani spravne, pak hibernate umi
dotaz takovy jaky je, dokonce natahne jak
zakazky tak rozsirene zakazky a vsechny se vsema sloupeckama. Dokonce se necha napsat
dotaz "select * from Object" a
ziskate vsechny persistentni objekty z db.
Diskriminator se pouziva v okamziku, kdy mapujete vice trid do jedne tabulky,
aby Hibernate dokazalo nejak odlisit tyto
ruzne instance od sebe. Diskriminator definujete vy v mapovani a pro kazdou
mapovanou tridu mu priradite hodnotu.
Takze ja bych rekl, ze v mapovani ten sloupecek mate, ale nemate jej v db
definovan.
Co vy na to?
Jirka