[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