[Java lista] JPQL Result Type of the SELECT Clause

Verhás István istvan at verhas.com
2010. Már. 12., P, 17:26:52 CET


A JPA a lazy loadingot a primitívekre nem támogatja, pedig azt szeretnéd.
Mivel a jpa egy Object Relational Mapping ezért fel sem merül, hogy 
betöltsön egy olyan objektumot amiben csak néhány attributum van 
beállítva mivel az adatbázisban nincs olyan entitás amiben a többi 
attributum null értékű lenne.

Szóval ha csak annyit akarsz betölteni, akkor kell egy külön entity. 
Erre írtad, hogy
"Az entitásra már meg vannak írva a különböző transformáló eljárások,
ezeket nem szívesen írnám meg többször."
Amit nem nagyon tudok hova tenni, mivel azt feltételezem, hogy az 
entitásokat bean-ként kezeled és annak megfelelően getter/setter-t 
használsz vagyis az entity belső változása nem befolyásolja a 
transformációkat.
Ha egy táblában akarod (miért is érdekel? biztos adott a tábla szerkezet 
mert így kapod :-), akkor @embeddable és @embedded annotációkkal tudod 
megoldani.

üdv
vi

Szomor Attila wrote:
> 2010.03.12. 16:26:59 dátumon Verhás István <istvan at verhas.com> írta:
>
>   
>> Amire te vágysz az a lazy loading. Ezt támogatj a JPA ha az attributum
>> nem primitív hanem entitás. Az alapértelmezett fetch type a kapcsolat
>> számosságától függ. Ha a túloldalból csak egy van akkor eager vagyis
>> betölti, ha sok akkor lazy. Szóval a sokkal nem kell törődni azt eleve
>> nem tölti be csak amikor meghívod a gettert, az egy az egyes illetve az
>> n az egyes-nél pedig be lehet állítani pl. így
>> @OneToOne(fetch=FetchType.LAZY)
>> Ezt kérdezted?
>> üdv
>> vi
>>     
>
> Sajna nem, ezt (és még sok ilyet) szeretném elkerülni:
> ------------------------------------------------------
> String query = "SELECT e FROM TerapiaTerap e";
> if (gridParams.getOtherGridParams().containsKey("GENERIC_GRID_QUERY")) {
>     query = "SELECT e.id,e.tenam,e.tecna,e.teflg FROM TerapiaTerap e";
> }
> response = JPAUtils.getBlockFromQuery(
>     gridParams.getAction(),
>     gridParams.getStartPos(),
>     blockSize,
>     gridParams.getFilteredColumns(),
>     gridParams.getCurrentSortedColumns(),
>     gridParams.getCurrentSortedVersusColumns(),
>     TerapiaTerap.class,
>     query,
>     new Object[0],
>     em
> );
> if (gridParams.getOtherGridParams().containsKey("GENERIC_GRID_QUERY")) {
>     // EZ AZ AMIT NEM SZERETNÉK !!!
>     VOListResponse voListResponse = (VOListResponse)response;
>     ArrayList<TerapiaTerap> terapiaList = new ArrayList<TerapiaTerap>();
>     List rows = voListResponse.getRows();
>     for (int c=0; c<rows.size(); c++) {
>        TerapiaTerap terapiaTerap = new TerapiaTerap();
>        Object[] row = (Object[])rows.get(c);
>        terapiaTerap.setId((BigInteger)row[0]);
>        terapiaTerap.setTenam((String)row[1]);
>        terapiaTerap.setTecna((String)row[2]);
>        terapiaTerap.setTeflg((String)row[3]);
>        terapiaList.add(terapiaTerap);
>     }
>     response = new  
> VOListResponse(terapiaList,voListResponse.isMoreRows(),voListResponse.getResultSetLength());
>     // EDDIG TART A TRANSFORMÁCIÓ OBJECT[] to ArrayList<TerapiaTerap> $$$
> }
> return response;
> mivel a JPA válasz egy "Object[]" nem pedig egy "TerapiaTerap" osztály a  
> kért négy attributummal feltöltve (sajnos)!
>
> Ami miatt érdekel ennek a táblának száznál több egyszerú attributuma van,  
> amiből a kliensnek 4 kell abból is kettő hidden a grid-ben.
>
>   

--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://javagrund.hu/pipermail/javalist/attachments/20100312/46daf2f4/attachment.html 


További információk a(z) Javalist levelezőlistáról