Ahoj,

jeste dodatek.

To nize uvede mapovani neni mapovani dedicnosti.
A taky anotace pro mapovani se nededi. Takze by to stejne nemohlo fungovat.

Tak jak to tam mate uvedene, tak mapujete dve Entity:

* Jedna ma sloupce NAZEV a ZAKAZKA.
Druha ma sloupce MAX_CENA.
*
Jak spravne mapovat dedicnost je tady: http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/#d0e788

*Ale vy jste asi chtel mapovat dve ruzne entity na jednu tabulku.
*To potom musite udelat jinak, pomoci anotaci:

/@Table  a parametru name anotace Entity.
U kazde tridy uvest vsechny mapovane property (proste tam overridujete metody a 
pridate k nim anotace  nebo jednoduseji to mapovani napisete v XML).
A zavolate SQLQuery#addEntity(String entityName);.
/
Nebo muzete pouzit postup popsany v 
http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/#d0e898


  Lukas


Karel Nagy wrote:
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


Odpovedet emailem