Ahojte,

v staršom projekte som používal Hibernate, kde sa SELECT cez Criteria API vytvoril podľa anotácie @Fetch ako JOIN master a detail tabuľky.

Pri použití Hibernate cez JPA 2 sa bez ohľadu na @Fetch vytvoria 2 selecty - jeden pre master a jeden pre detail. Riešenie som našiel len v použití metódy fetch() priamo v CriteriaQuery:

CriteriaQuery<CestaTO> c = cb.createQuery(CestaTO.class);
Root<CestaTO> emp = c.from(CestaTO.class);
emp.fetch("cestujuci");
c.select(emp);

Toto je ale podľa mňa hlúposť, pretože to bude treba definovať v každom query, vôbec sa neprejaví v Hibernate definovaná property - hibernate.max_fetch_depth, a najhoršie - pri údržbe projektu sa napr. zmení datový model a bude treba všetky tieto Query prepísať.


Určite ste to niekto riešil, pretože takto to určite nebude používať nik.
Takže moja otázka - ako ste to riešili?

Dík,
Rastislav "Bedo" Siekel


P.S. Ukážka mojej definície DTO:

@Entity()
@Table(name = "CESTA")
public class CestaTO extends BaseTO implements Serializable
{
    @Column(name = "idCestujuci", nullable = false)
    private Integer idCestujuci;
   
    @ManyToOne()
    @JoinColumn(name = "idCestujuci", insertable = false, updatable = false, nullable = false)
    @Fetch(FetchMode.JOIN)
    private UzivatelTO cestujuci;
...
}



Ing. Rastislav Siekel
Prosoft s.r.o., Kuzmányho 8, 010 01 Žilina, Slovakia
E-mail : <[email protected]>
Tel : 041/562 54 91
Fax : 041/562 54 97
Mobil : 0905 34 00 20

Odpovedet emailem