Új hozzászólás Aktív témák
-
-
floatr
veterán
válasz
Oppenheimer #7198 üzenetére
Legjobban akkor jöttem ki hasonló dolgokból, amikor az efféle collection-öket letiltottam a serialization-ből, és külön húztam le, amikor szükség volt rá. Ha egyből használnád is, ahogy ez nem éppen a legoptimálisabb, akkor is lehet callback/promise lánccal hívogatni a service-eket. Nekem ettől a DTO-s konvertálgatástól hidegrázásom van...
-
Szmeby
tag
válasz
Oppenheimer #7195 üzenetére
Ha más lehetőség nincs a copy-paste mindig segít.
MovieEntity a JPA-nak, MovieRepresentation a JSON parsernek, és a kettő közé egy finom konverter, ami egyikből másikat csinál. A két eszköz nem fog egymásnak bekavarni, a konverterben meg célzottan meg tudod adni, miből mikor mit csináljon. -
Oppenheimer
nagyúr
válasz
Oppenheimer #7195 üzenetére
Ez így nagyon nem pálya, 1 weboldal betöltéséhez n*100 http üzenetváltás kéne. Tanácstalanná váltam
-
Oppenheimer
nagyúr
válasz
Mukorka #7194 üzenetére
Lehet kezdek rájönni. Ignorálni kéne alapból minden kapcsolatot, és kézzel intézni őket.
hmm... de ha @JsonIgnore-t rakok rájuk, akkor sehogy sem tudom majd serializálni őket JSON-ba.
Minden bizonnyal az van amit írsz, de nekem nem világos miért akarja a Jackson bejárni az egész adatbázisomat.
Ha sikerülne neki, alsó hangon 8 gigás lenne a HTTP response bodyja.
-
Mukorka
addikt
válasz
Oppenheimer #7193 üzenetére
Nem lehet hogy a fel eager fetchelt objektum listád tagjainál száll el , hisz azokban ugyan úgy van lazy collection ami visszamutat. A json parser meg gondolom mindent felránt ami be van annotálva vagy ami nincs (nemtom melyik). Ez esetben valami ignore-t lehetne rájuk tenni.
-
Oppenheimer
nagyúr
válasz
Oppenheimer #7192 üzenetére
Ez nem fog működni, baja van a Jacksonnak.
Pl filmeknél direkt gettelek minden színészt, írót és producert, mégse hajlandó létrehozni belőle a json objektumot:
Could not write content: failed to lazily initialize a collection of role: com.movietime.model.MoviesEntity.actors, could not initialize proxy - no Session (through reference chain: com.movietime.model.MoviesEntity.
Nem tudom minek akar itt proxyzni, amikor be vannak töltve neki a dolgok, és megfelelően annotálva vannak az entitások is, pl MoviesEntity:
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "movieid")Ez csak az egyik baj, a másik az, ha csak listázni akarok filmeket, akkor fölösleges betölteni minden filmhez minden adatot, elég csak a címet, rendezőt és mondjuk két színész nevét kiírni a listában. A többit akkor kéne csak lekérdezni az adatbázisból, ha rákattint valamelyikre a felhasználó. Ha sikerülne is rávenni a Jacksont, hogy legalább akkor csinálja a dolgát, amikor minden információ megvan hozzá, ez a funkció még akkor se működne.
-
Oppenheimer
nagyúr
Többnyire gúglit nézek, aztán onnan mindenfelé vezetnek utaim, többek között a hibernate doksihoz is.
Nekem az 1-es megoldás tetszik a legjobban, és ha nem jön be, akkor megnézem a többivel. A gond lehet, hogy valójában nem is itt van, hanem a JSON parserrel, de ez még kiderül, mindenesetre most nőtt annyival a tudásom, hogy jó ideig ellegyek vele.
Egyébként több helyen is olvastam, hogy a hibernatenek tudnia kéne kezelni eager fetchelés közben az ilyen ciklikus, 2 irányú many-to-many kapcsolatokat, de úgy látszik a gyakorlatban még sincs így.
(#7191) emvy: Hmm, logikusan tűnik.
-
válasz
Oppenheimer #7189 üzenetére
Az alacsonyabb szintu retegek altalaban epphogy kevesbe optimalisak, mert nem all rendelkezesukre az osszes informacio (constraint, etc.), ami a felette levo retegeknek igen. Csak megjegyeztem (a konkret temahoz eleg keveset lovok, en altalaban nagyon alapdolgokra hasznaltam csak Hibernate-et, es utolag nem is biztos, hogy volt ertelme)
-
Szmeby
tag
válasz
Oppenheimer #7186 üzenetére
Kicsit későn lövöm el a hsz-t, feltartottak. Talán ad ötletet.
--------
Szerintem fixen belőtt annotációkkal nem fog menni, mivel nem egyértelmű, hogy melyik fetch módot kell alkalmazni.
Alap, hogy minden lazy. Mivel csak a REST hívás beérkezésekor tudod eldönteni, hogy adott esetben melyik kapcsolatot kell eager fetchelni, nincs mese, runtime ott helyben kell megmondanod neki.Erre sokféle módszer létezik, hogy melyik szép, azt nem tudom.
1. Ha a user a filmre kíváncsi, előkeresed a filmet, majd ráhívsz a getActors() metódusra (ez úgy tudom meglöki a proxy-t és ha sessionben vagy, akkor feltölti az actorokkal is).
2. Talán named query használatával (movie és actor joinnal) ez a bohóckodás egyszerűbbé tehető.
3. Rémlik valami olyasmi, hogy JPA/Hibernate alatt runtime felülbírálható a fetch mód. De itt is áll, hogy minden lazy és szükség esetén adott hívásnál döntöd el, hogy mit nyomatsz eagerrel. Mintha valamiféle fetch profilt kellene ehhez létrehozni (ezzel jól megannotálva az entitást), és az entitás lekérésekor elég csak a profilra hivatkozni.
4. ...
Sajnos nagyon régen Hibernate-eztem, nem biztos, hogy ezek a legjobb megoldások, vagy hogy egyáltalán működnek.
A hibernate doksit nézted már? -
Oppenheimer
nagyúr
válasz
Mukorka #7188 üzenetére
Köszönöm, akkor nincs mese, ez az üzleti logika része lesz, és kézzel rakom össze. Igen, nyilván a hibernate se egy SQL query-vel oldaná meg, de feltételezem, hogy mivel alacsonyabb szinten van, ezért ha lenne benne ilyen lehetőség, jobban optimalizált megoldás lenne, mint az enyém.
-
Mukorka
addikt
válasz
Oppenheimer #7187 üzenetére
A transactional csak azt dönti el hogy a bean vagy a container manageli e a tranzakciót.Ettől még a dao hívás végén vége a tr-nek és a sessionnek is. Elvileg nem is lehet egynél több persistentbag-et fetchelni egyszerre. Attól hogy mindenki eager még nem lesz egy select az egész tehát a db kapcsolatot a tákolós megoldás is épp annyira terheli le.
Ahogy én eddig láttam erre rendszerint a külön dao hívások jelentenek megoldást. Mindegyiknél eldöntöd hogy mire van ténylegesen szükséged, alapból meg minden lazy.
-
Oppenheimer
nagyúr
Ha egy service layer-beli osztályban van egy @Transactional metódus, ami meghívja egy DAO osztály metódusát, amely osztályban be van injektálva egy EntityManager @PersistenceContext-tel, akkor ennek az EntityManagernek a perzisztenciakontextusa megmarad a hívó service layer-beli metódusban is?
Most kísérleti jelleggel azt csinálom, hogy a RestController osztály metódusát jelöltem @Transactional-nek és az közvetlen hívja a DAO osztály metódusát, ami egy MovieEntityvel tér vissza, de amikor a RestController metódusa átadja a Jackson JSON parsernek a MovieEntityt, akkor mintha már nem lenne meg a perzisztenciakontextus, mert a hibernate proxy objektum megszűnt, és nem éri el a kapcsolódó entitásokat:
com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: com.movietime.model.ActorsEntity.movies, could not initialize proxy - no Session
Próbálkoztam azzal, hogy EAGER fetchinget állítok be minden Entitás osztályban, és akkor nem lenne ilyen probléma, de akkor a túl sok bi-directional many-to-many asszociáció miatt megbolondul a hibernate és a Query.getSingleResult() már vissza se tér.
Kerestem olyan megoldást is, hogy lehessen korlátozni az EAGER fetching mélységét, de csak olyat találtam, hogy a LAZY-t lehet optimalizálni @BatchSize-zal. Viszont ez nekem nem jó, mert a JSON parserig már nem jut el a hibernate sessionje, vagy persistence contextje, nem tudom hogy hívjam.
Csinálhatnám azt is, hogy a DAO rétegben olyan lekérdezéseket írok kézzel, hogy lekérem a filmet, aztán lekérem a hozzá kapcsolódó színészeket, producereket, mindenkit, és összetákolom a kapcsolatokat, de ez egyrészt nagyon lábbal hajtós, másrészt az adatbáziskapcsolattal nagyon pazarló lenne. Jobb lenne, ha ezt a hibernate elintézné.
Az is jó lenne, ha a @Transactional úgy működne, ahogy a hsz elején a kérdésben feltettem, de nekem úgy tűnik, mintha nem így történne. Lehet azért, mert nem JTA típusú tranzakcióim vannak, hanem JPA?
-
Oppenheimer
nagyúr
Vannak adatbázis entitásaim amik körbehivatkoznak egymásra, például MoviesEntity ismer csomó ActorsEntity-t és vica-versa. Ezeket az entitásokat akarom REST-en keresztük JSON-nel elérhetővé tenni, méghozzá úgy, hogyha jön egy GET request egy MoviesEntity-re, akkor fetchelje le a hozzátartozó Actorokat, Producereket, stb-t, de ne tovább. Ez sikerül is az alábbi módon:
MoviesEntity:
@JsonManagedReference
private List<ActorsEntity> actors;
...
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "movies2actors", catalog = "movietime2", schema = "", joinColumns = @JoinColumn(name = "movieid", referencedColumnName = "movieid", nullable = false), inverseJoinColumns = @JoinColumn(name = "actorid", referencedColumnName = "actorid", nullable = false))
public List<ActorsEntity> getActors() {
return actors;
}ActorsEntity:
@JsonBackReference
private List<MoviesEntity> movies;
...
@ManyToMany(mappedBy = "actors") // LAZY fetching is default
public List<MoviesEntity> getMovies() {
return movies;
}Ez rendben is van. Viszont azt is szeretném, hogyha valaki egy Actor-t kérne GET requesttel, akkor ugyan úgy kapja meg az 1 távolságra lévő kapcsolódó entitásokat is (pl milyen filmekben játszott).
Erre nincs ötletem, nem is nagyon találtam neten semmit. Esetleg valaki tudja mi ilyenkor a teendő, vagy ha valaki jobban gúglizik, mint én, az is nagy segítség volna.
conditional annotiation ha lenne, milyen jó lenne.
-
Oppenheimer
nagyúr
válasz
szcsaba1994 #7184 üzenetére
újabb verzióval fordítottad, mint amilyen JRE van a gépeden. szedd le a JRE 1.8-at és állítsd át a java HOME-ot arra.
-
szcsaba1994
tag
Sziasztok!
Eclipse-ben lefordul a programom, de terminálban ezt a hibát kapom, java Main.java beírása után:
Unsupported major.minor version 52.0.
1.7.0_75-öt ír a java -version; a javac -version 1.8.0_40-t
Ubuntu 14.10-et használok -
CJ19
csendes tag
Köszi a helpet, sikerült megoldani!
-
Oppenheimer
nagyúr
-
WonderCSabo
félisten
Igen, csak ez így teljességgel helytelen. Csak azonosok tulajdonságot kell és lehet egymással összehasonlítani. Valami ilyesmi:
if first.key1 == second.key1
return first.key2 < second.key2;
return first.key1 < second.key1Persze ez azt jelenti, hogy az azonos napokon belül növekvő a ride, remélem erre gondoltál, mert máshogy nincs értelme.
-
CJ19
csendes tag
válasz
Oppenheimer #7178 üzenetére
A két érték szerint kéne rendezni. A napnak is növekvőnek kell lennie és a ridenak is.
-
CJ19
csendes tag
Hi again..!
Van egy arraylistem ami ilyen adatokat tartalmaz:
[futar{day_of_week=1, ride_number=11, distance=6}, futar{day_of_week=1, ride_number=10, distance=5}, futar{day_of_week=1, ride_number=9, distance=8}, futar{day_of_week=1, ride_number=8, distance=9},
futar{day_of_week=3, ride_number=15, distance=2}, futar{day_of_week=3, ride_number=14, distance=5},
futar{day_of_week=3, ride_number=13, distance=3}, futar{day_of_week=3, ride_number=12, distance=2},
stb...
Ez így day_of_week szerint növekvő sorrendben van... hogy tudnám úgy megcsinálni, hogy ride_number szerint is növekvő legyen?a kód amivel ezt elértem eddig:
private static class MyComparator implements Comparator<futar> {
@Override
public int compare(futar o1, futar o2) {
if (o1.day_of_week > o2.day_of_week && o1.day_of_week<o2.ride_number) return 1;
if (o1.day_of_week == o2.day_of_week && o1.ride_number == o2.ride_number) return 0;
return -1;
}
} -
Szmeby
tag
válasz
Anita330 #7174 üzenetére
Hát, hajrá, hajrá.
Én első körben kideríteném, mi az a Newton-módszer. Ilyesmikre a wikipedia jó kiindulópont szokott lenni.
Aztán átültetném ezt egy olyan nyelvbe, amiben változóknak lehet értéket adni, meg mindenféle vezérlési szerkezetekkel lehet ezeket piszkálni.
A szemfülesebbek 2 kattintásból is találnak hozzá pszeudokódot.
Persze megérteni azt is meg kell, de jóval egyszerűbbé válik átültetni az egészet javaba. És végülis erről szól az alkalmazott matek, nem?
Egy munkahelyen ennél azért jóval húzósabb feladatokat kell majd csinálni, és sokszor nemigen akad olyan, aki megmondja a tutit.A gyengébbek persze matlabozhatnak is, de egy java fórumon ilyet csak nem mondok. Én amúgy javaban csinálnám, mert a matlabhoz még annyira sem értek.
Amúgy elég sok az átfedés a feladatok között... szabad csapatban dolgozni?
-
-
Anita330
újonc
Sziasztok!
Egy matematikai programozási feladattal kapcsolatban kérdeznék.
"Közelítse az e^x = 3x egyenlet megoldását Newton módszerrel 10^-7 pontossággal!"
Az lenne a kérdésem, hogy a javaban, hogyan lennék képes megoldani. Ha valaki megtudná oldani nagyon megköszönném. -
M_AND_Ms
veterán
válasz
Aethelstone #7164 üzenetére
Nem is ellenvetésként írtam.
-
M_AND_Ms
veterán
válasz
Aethelstone #7161 üzenetére
Az épitőipari iskolában a diákok két méter hosszú és egy méter magas téglafalakat építgetnek, majd elbontják azokat. Tök értelmetlen!
Mégis, milyen példákon tanuljanak a diákok? Egy mintapélda mégse lehet, egy nagyvállalati ügyviteli rendszer. Ezek a példák a gondolkodást és annak adott nyelven történő megvalósítását tanítjak, ez a konkrét példa is pont ilyen. Szépen látszik, hogy egy ciklus az egész, melynek magjában változók értékadása, majd azok következő ciklusbeli felhasználása történik. Szép, frappáns feladat.
-
Aethelstone
addikt
válasz
Oppenheimer #7155 üzenetére
Ha már Hibernate, akkor érdemes lenne a Hibernate Session körül is futnod pár kört. Nyilván a használata nem olyan általános, mint ha EntityManager-t injektálsz, de én még olyat nem láttam, hogy egy nagy (vagy kicsi) projektben az ORM réteget egy az egyben lecserélték volna. Ha meg igen, akkor az új ORM réteg megfelelő, natív megoldását használják úgy is.
-
Aethelstone
addikt
válasz
Ursache #7160 üzenetére
Nos, a való életben ritkán lehet megoldani valami feladatot abban, amiben akarod. Ráadásul ha a konkrét példát nézzük, akkor mondjuk adott egy Java alapú backend, amiben szükség van valamiféle numerikus analízisre...mondjuk egy Gauss eliminiációra vagy akármi másra. Értem én, hogy mondjuk Matlab-ban 5 sor, de aztán azt hogy integrálod be a rendszeredbe és még sorolhatnám...
Ezek a szösszenetek arra jók, hogy a Hello Világ-on felül is próbáljanak valamit mutatni az adott nyelv lehetőségeiből, erejéből, gyengeségéből, stb. Az egyetemi/fősikolai példák meg egyébként sem a praktikus mivoltukról híresek
-
Ursache
senior tag
válasz
Aethelstone #7159 üzenetére
Ez minősítheti a NIK-et? ELTE-IK után pedig oda akartam/akarok menni, mondjuk csak a referencia NIK-es... + a tárgyat úgy is beszámíttatnám...
Továbbá ha valamit shell-ben meg tudok oldani 2 sorban, akkor nem kezdem el C#-ban megírni.
Az jó nagy marhaság lenne, ha numerikus analízist java-ban erőltetik
-
kispx
addikt
A linkelt pdf-ben megemlíti, hogy a pontossága a többi módszer alatt marad.
Viszont ha pontosabb eredményt akarsz, akkor a következőt is csinálhatod. Az "n" értékét nagyra állítod és a "c" változó változását nézed. Tehát, ha az első tizedes jegy már nem változik, akkor az első tizedes jegyet már pontosan meghatároztad. És így tovább a több tizedesjeggyel.
-
vagymi
újonc
Sziasztok!
Egy matematikai programozási feladattal kapcsolatban kérdeznék.
"Közelítse az e^x = 3x egyenlet megoldását felező módszerrel 10^-4 pontossággal!"Az lenne a kérdésem, hogy a javaban, hogyan lennék képes megoldani ezt az egyenlőtlenséget hogy:
e^x - 3x = 0?Mi az az intervallum-felező módszer(?):
Megoldás:
double a, b, c, fa, fc;
a = 0;
b = 1;
for (int i = 1; i <= 4; i++) {
c = (a + b) / 2;
fa = (Math.pow(Math.E, a) - 3 * a);
fc = (Math.pow(Math.E, c) - 3 * c);
if (fa * fc < 0) {
b = c;
} else {
a = c;
}
System.out.println(c);
}Lényegében ha megtudnám az x értékét akkor az "a" és "b" nem 0 és 1 kerülne hanem egy pontosabb eredmény, így végül pontosabb lenne a végeredményem is és nem:
0.5
0.75
0.625
0.5625 -
Oppenheimer
nagyúr
Fogtam magam, leklónoztam egy projektet githubról, átírtam 1-2 dolgot, hogy nekem jó legyen, és azóta boldog vagyok.
Persze azt fel kellett hagynom, hogy Eclipselinket használjak Spring mellé, Hibernatetel minden megy mint a karikacsapás.
(#7154) Aethelstone: Most örülök, hogy működik RESOURCE_LOCAL-lal, tudok EntityManagert injektálni @PersistenceContext-tel, szóval mindent megkaptam amit akartam. Ha kicsit több önbizalmam lesz, átállok, de kicsit haladni is szeretnék a projekttel.
-
Aethelstone
addikt
válasz
Oppenheimer #7153 üzenetére
Mindig célszerű JTA-t használni. Lehet kézzel is állítgatni a DAO rétegben, de vért lehet hugyozni vele....
Sőt, container managed környezetben bűncselekmény nem JTA-t használni.... -
Oppenheimer
nagyúr
válasz
Oppenheimer #7149 üzenetére
Fejlemény. Na mondom kipróbálok másik application servert, legyen Glassfish 4. Arra nem tudtam deployolni az alkalmazást:
cannot Deploy MovieTimeProject
deploy is failing=Error occurred during deployment: Exception while preparing the app : The persistence-context-ref-name [com.movietime.repositories.ActorRepository/em] in module [MovieTimeProject] resolves to a persistence unit called [MovieTime] which is of type RESOURCE_LOCAL. Only persistence units with transaction type JTA can be used as a container managed entity manager. Please verify your application.. Please see server.log for more details.Akkor mégiscsak JTA típusú tranzakció kell. Fasza.
-
skoda12
aktív tag
válasz
Oppenheimer #7151 üzenetére
Tipikusan akkor használják ezt a kifejezést, amikor valaki olvas valami újat és minden problémát ezzel akar megoldani.
Persze értem, hogy te most csak tanulási célok miatt próbálgatod. -
Oppenheimer
nagyúr
-
válasz
Oppenheimer #7147 üzenetére
"Miért ilyen nehéz rávenni a springet és a JPA-t, hogy működjön?"
Azért,mert ezeket arra találták ki, hogy minel tobb konzultanst meg fejlesztőt kelljen a multicegeknek alkalmaznia, az, hogy bizonyos esetben meg lehet veluk oldani a problémát (vagy azt hiszed, hogy meg lehet), csak egy mellékhatás
/troll
"LocalContainerEntityManagerFactoryBean" -- ez szepen összefoglalja
Szoval ha jol latom, egy irtozatosan egyszeru dolgot akarsz megcsinalni -- a problema ezzel az okoszisztemaval az, hogy
- egyszeru dolgokat is bonyolult megcsinalni
- ha az egesz hobelevancot megtanulod sok-sok ido alatt, onnantol meg van egy bazi nagy kalapacsod, es igazabol ugy tudsz normalis penzt keresni, ha mindent szognek nezel. -
Oppenheimer
nagyúr
válasz
Oppenheimer #7147 üzenetére
Az a baj, hogy hiába gúglizok, csak olyan találatok vannak, amikor JPQL-ben a tábla nevét használták az entitás helyett, de nálam nem így van. Próbáltam azt is, hogy a
<exclude-unlisted-classes>false</exclude-unlisted-classes>
sort kivettem a persistence.xml-ből és explicit felsoroltam az osztályokat, ugyan ez az error volt. -
Oppenheimer
nagyúr
-
Oppenheimer
nagyúr
Na újra itt vagyok. Kicsit rendbeszedtem a config fájlokat, most a következőképpen néznek ki a dolgok:
web.xml, spring-servlet.xml, persistence.xml
A HelloController-ben kérek egy lekérdezést az adatbázisból a MovieService-en keresztük a MovieRepository-tól, és az em.createQuery exceptiont dob.
Nem értem miért, mert a LocalContainerEntityManagerFactoryBean-ben meg van adva a "packagesToScan" property "com.movietime.entities"-nek, és a persistence.xml-ben is ott van, hogy
<exclude-unlisted-classes>false</exclude-unlisted-classes>.Azt mondja, hogy
"[14, 19] The abstract schema type 'Movie' is unknown.
[28, 35] The state field path 'm.title' cannot be resolved to a valid type."miközben az IDE képes volt rájönni, hogy mi ez a Movie.
Miért ilyen nehéz rávenni a springet és a JPA-t, hogy működjön?
-
werszomjas
addikt
Sziasztok.
Az alábbi oldalon nektek megy a java?
Hiába telepítem a java alkalmazást, nem akar menni. Se chrome, se mozilla, se explorer. Win7 alatt.
Ezt írja:
Nem megfelelő futtatókörnyezet
Ha ezt az oldalt látja, az azt jelenti, böngészője nem, vagy csak részben alkalmas az e-Jelentés rendszer futtatására.
A probléma oka: nincs engedélyezve a JAVA alkalmazások futtatása.
A hiba elhárításához kérjük vegye fel a kapcsolatot számítógépe rendszergazdájával, és kérje meg, engedélyezze az e-Jelentés weblapjáról származó JAVA alkalmazások futtatását.Ha valakinek van valami ötlete, szívesen fogadom, meg hogy egyáltalán van-e olyan akinek megy
-
estro
csendes tag
válasz
Sk8erPeter #7132 üzenetére
Az SQL injection tudtam, hogy veszélyes az adatbázisomra, de még nem néztem utána mit lehet ellene tenni, de akkor most már tudom
. A SELECT * tényleg eléggé rontja a teljesítményt most, hogy belegondolok (főleg ha majd joint is használok), majd kijavítom azt is, mert már van vagy 5 mező mivel regisztrációt is csináltam hozzá. Köszi a tippeket!
-
floatr
veterán
válasz
Ursache #7135 üzenetére
Visszakanyarodva az eredeti felvetéshez -- mielőtt elmegy a topic a PH fórum szabályai irányába -- még ha van egy perzisztencia motorod, az is bele fog gabalyodni az oszlop nevekbe, mert nem fog tudni kötni semmilyen objektumot a resultset-hez jól, ha abban két azonos nevű oszlop van, pl.:
SELECT * FROM User u
INNER JOIN Company c ON c.id=u.company
WHERE ...Ha a User és a Company táblában is van egy name oszlop, akkor a visszakapott eredményben a User és a Company nevek értékei kavarodnak. Ha már csak egy natív SQL-t hajtasz végre, és egy Object[]-be kéred az eredményt, akkor is az egyik táblában lévő name értéke lesz mindkét pozícióban. Ezért van az, hogy minden mezőt felsorolnak és mindegyiknek egy aliast adnak.
-
Ursache
senior tag
válasz
Sk8erPeter #7134 üzenetére
LOL! Most látom, hogy ezt a "másik" topikban is megkaptam, arra ott nem reagálnék, ha nem gond
-
Aethelstone
addikt
válasz
Sk8erPeter #7140 üzenetére
Hogyne
-
Sk8erPeter
nagyúr
válasz
Aethelstone #7138 üzenetére
Így van.
De vágod, nem nekem kell magyarázni, pont emiatt szóltam a kollégának.
-
Aethelstone
addikt
válasz
Sk8erPeter #7136 üzenetére
Mivel megeshet, hogy közben valaki gyorsabban ír egy hozzászólást, már azonnal nem a következő lesz....
-
Ursache
senior tag
válasz
Sk8erPeter #7136 üzenetére
My bad.
-
Sk8erPeter
nagyúr
válasz
Ursache #7135 üzenetére
"Pár éve olvastam egy etikettet, vagy szabályzatot, miszerint ha az éppen előtted szólónak szánod a hozzászólást, akkor ne használd a válasz gombot. Azóta megváltozott? Vagy a topicra más érvényes?"
Ilyen szabály SEHOL nem volt soha érvényben.Sőt, pont ennek ellenkezője van az alapelvek között is.
http://prohardver.hu/allando/alapelvek.html#jotanacsok
III.12.4.3. "Egy hozzászólásra mindig a Válasz linkkel írj, hogy mindenki láthassa mire és kinek válaszoltál." -
Ursache
senior tag
válasz
Sk8erPeter #7134 üzenetére
Pár éve olvastam egy etikettet, vagy szabályzatot, miszerint ha az éppen előtted szólónak szánod a hozzászólást, akkor ne használd a válasz gombot. Azóta megváltozott? Vagy a topicra más érvényes?
Tőled kérdeztem.
Oké, köszi, nagyjából ezeket tudtam volna elképzelni.
-
Sk8erPeter
nagyúr
válasz
Ursache #7133 üzenetére
Most ezt kitől kérdezed? Mert megint nem használtad a Válasz linket.
Szokj már rá a használatára légyszi, nagyon zavaró a hiánya (hogy nincs előzménye a hsz.-eidnek a fejlécben), köszi.
Amúgy keress rá Google-ben a "why select * is bad" kulcsszavakra, bőven fogsz találni cikkeket a témában. Röviden: teljesítmény szempontjából nagyon káros tud lenni. Ezenkívül teljesen felesleges minden egyes oszlopot kiválasztani, amikor az esetek 99%-ában nincs szükség mindegyikre. Nem beszélve arról, hogy a mezők egyértelmű felsorolásával kiolvasható a query-ből az is, hogy egyáltalán milyen mezők lesznek elérhetőek (pl. ha már JDBC, a ResultSetből való mezőeléréskor), és melyekre van szükségünk, tehát maga a kód is értelmesebb lesz tőle. -
Ursache
senior tag
Miert nem javasolt? Vannak otleteim, de hallani is akarok felole.
-
Sk8erPeter
nagyúr
Azt vágod, hogy a felhasználótól kapott adatot egy az egyben dobálod bele a query-be, escape-elés vagy sokkal inkább prepared statement (rendkívül meglepő módon erre való a PreparedStatement és a Connection osztály prepareStatement metódusa) használata helyett, ezzel fasza kis lehetőséget adva az SQL Injectionre?
http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
Meg amúgy a SELECT * használata nagyon nem javasolt sehol. Sorold fel szépen a mezőket, amikre szükséged van.
-
Miota a workspacet felhobe akarom menteni, azota crashel az asztalin a sync engine...
Ezzel mas is talalkozott, vagy csak en voltam helikopter, hogy ezzel probalkoztam? -
Aethelstone
addikt
Connection con = null;
Statement stmt = null;
ResultSet rs = null;String sql_comm = "select * from root.users where username = ’" + username + "’ and password = ’" + password + "’";
try {stmt = con.createStatement();
Mintha nem lenne inicializálva....gondolom, hogy a connect(); tenné meg, de akkor azt mondjuk a deklaráció után kellene írni...vagy hogyisvanez?
-
Lortech
addikt
-
estro
csendes tag
Sziasztok!
Akarok csinálni egy bejelentkezést jsp+servletel, de ugyan azt a hibát kapom akármit csinálok.
Servlet doPost:PrintWriter out = response.getWriter();
String username = request.getParameter("user");
String password = request.getParameter("pwd");
UserSQL dao = new UserSQL();
int result = dao.loginUser(username, password);
if (result == 1) {
RequestDispatcher rd = getServletContext().getRequestDispatcher("index.jsp");
out.println("<font color=red>Adatbázis hiba.</font>");
}
if (result == 2) {
RequestDispatcher rd = request.getRequestDispatcher("error.jsp");
// RequestDispatcher rd = getServletContext().getRequestDispatcher("error.jsp");
out.println("<font color=red>Rossz felhasználónév/jelszó.</font>");
}
HttpSession s = request.getSession();
s.setAttribute("username", username);
s.setAttribute("login", true);
response.sendRedirect("success.jsp");A userSQL class aminek át kellene vennie a 2 stringet és vissza adni egy számot, de szerintem nem kapja meg az értékeket:
public int loginUser(String username, String password) {
connect();
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
String sql_comm = "select * from root.users where username = ’" + username + "’ and password = ’" + password + "’";
try {
stmt = con.createStatement();
rs = stmt.executeQuery(sql_comm);
if (rs.next() == false) {
return 2;
} else {
return 0;
}
} catch (SQLException e) {
e.printStackTrace();
return 1;
} finally {
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}Hibaüzenet:
java.lang.NullPointerException
model.UserSQL.loginUser(UserSQL.java:47)
controller.login.doPost(login.java:53)
javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)Tudna valaki segíteni, ötletet adni mi baja lehet? Van sok megoldás a neten, de én ezzel akarom csinálni és érdekelne mit rontottam el. NullPointerException ez ha jól tudom azt jelenti, hogy null értékű objektummal tér vissza, de javítsatok ki ha tévedek.
Előre is köszi a segítséget. -
Lortech
addikt
Szerintem arra gondolhat, hogy ha float f = 0.1; -t ír, akkor erre hibát jelez a fordító, mivel a 0.1 literál alapból egy double, de ha 0.1f -et ír, akkor már float.
szerk: ja.
Szóval zolka95, ha
float valami = 3.15;
helyett
float valami = 3.15f; -et írsz, akkor már nem panaszkodik a fordító. -
zolka95
őstag
A float változóba csak 32bites rendszeren tudok törtszámot megadni?
A double-be pedig 64bitesen?Mert olvasom a java 24 óra alatt című könyvet (2000-ben jelent meg) és ebben azt írja, hogy a float-ban lehet tört számot megadni. Nálam nem működött (64 bites rendszer).
Rákerestem és ezt találtam:float egyszeres pontosságú lebegőpontos méret/formátum: 32 bit IEEE 754
double dupla pontosságú lebegőpontos méret/formátum: 64 bit IEEE 754Ez azt jelentené, amit írtam?
Mert a double működik tört számmal, a float pedig nem.És mit jelent az egyszeres és dupla pontosságú lebegőpontos változó?
-
floatr
veterán
válasz
Oppenheimer #7113 üzenetére
Találtam neked egy persistence unitos összetettebb példát: [link]
-
Oppenheimer
nagyúr
válasz
Lortech #7111 üzenetére
Már elindultam abba az irányba, hogy persistence.xml-t kitöröltem, és helyette a spring-servlet.xml-ben configolok, de ekkor egyrészt sír az IDE, hogy hiányzik a persistence.xml, másrészt meg nem tudom, hogy ez esetben hogyan férek hozzá a PersistenceContexthez, vagy azzal ekvivalens funkcióhoz. Ehhez dobna valaki egy leírást?
Most így néz ki a spring-servlet.xml.
(#7112) jetarko:
Jaja, azt benéztem, de eredetileg azért volt ott a .controller, mert azt hittem, hogy csak @Controller osztályokra van szüksége. -
jetarko
csendes tag
válasz
Oppenheimer #7109 üzenetére
Szerintem az xml-ben és java kódban megadottnak egyeznie kell, azaz ha ott emf, akkor a java-ban is írd át emf-re.
A package bejárás meg azért nem megy ha jól látom, mert "com.movietime.controller" van megadva, de a dao ez mellett van és nem benne, ezért vagy megadod, hogy "com.movietime" és innentől bejárja vagy, megadod külön a dao és service package-t is. -
Lortech
addikt
válasz
Oppenheimer #7110 üzenetére
Datasource definícióval nem jó valamiű, de mindenre van egy SO link: [link]
-
Oppenheimer
nagyúr
válasz
Oppenheimer #7109 üzenetére
Rossz sort másoltam ki. Ez az error.
-
Oppenheimer
nagyúr
válasz
jetarko #7103 üzenetére
(#7103) jetarko:
Itt szerintem fel kell sorolni azokat a packageket amikben @componentekre hivatkozol. Pl dao(repo) service csomagok is.Felsorolhatom, de nem kéne neki rekurzívan bejárni a packageket?
A spring xml-ben emf-t adtál meg, a repoban meg em-re hivatkozol.
Tutorialokból raktam össze. A célom az lenne, hogy @PersistenceContext annotációval be tudjak injektálni EntityManagert, és azt használni. Egyébként itt ezt írja: Spring injects @PersistenceContext into Spring components on its own. In order to do so, applications need to be have access to an EntityManagerFactory bean. Gondolom ezért tettek a tutorialban a spring-servlet.xml-be LocalContainerEntityManagerFactoryBean-t.
Ha ehhez a funkcionalitáshoz, amit írtam, valami más kéne a spring-servlet.xml-be, nyugodtan szóljatok.Az xml fájlokban miért van annyi kommentezés?
Azok olyan dolgok amik most nem kellenek, de később fognak. Először működjenek legalább az alapok.
(#7104) Lortech:
Beírtam a persistence.xml-be az alábbi sort az alapján amit floatr linkelt:
<jta-data-source>java:/DefaultDS</jta-data-source>de deployment közben továbbra is error van:
13:57:38,405 INFO [org.jboss.as.server] (ServerService Thread Pool -- 28) JBAS018559: Deployed "MovieTimeProject.war" (runtime-name : "MovieTimeProject.war")
(#7105) floatr:
Ahogy fent is írtam, kipróbáltam, hogy beállítom a jta-data-source-ot, de nem jó. Később szeretném ha az adatbázis 2db clusterezett MySQL instance lenne, köztük egy load balancerrel, és ehhez gondolom nem elég jó a RESOURCE_LOCAL transaction-type. Egyébként Wildfly 8.2-t akarok használni, nem Tomcatet.
Azt mondod, ha kidobnám a persistence.xml-t a kukába, és helyette az általad adott kóddal configolok a spring-servlet.xml-ben, akkor működőképes lesz a cucc? Ha később JTA tranzakciókra kell átállnom, akkor is megoldható lesz így?
-
-
jetarko
csendes tag
Service rétegben akarok egy bizonyos ídő után módosítani az objektum értékén, de nem megy.
A user bejelentkezik majd kap egy aktivációs tokent, de azt akarom, hogy a token csak x ideig legyen életben.
A dao és service így néz ki röviden: [link][link]
Hiba üzenet:org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:134)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014)A szál előtti módosítás megtörténik a db-ben, de mikor a szál elkezdi a módosítást, akkor jön a hiba.
Nem csináltam még szálkezelést Service rétegen belül, hogyan kéne ezt rendesen kivitelezni?
-
floatr
veterán
válasz
Oppenheimer #7102 üzenetére
[link] Egy válasz a sok közül
Amúgy a load-time weaving nem fog működni tomcat alatt. Egy kollégám hónapokig kesergett miatta. JUnit tesztben ment tomcat 8 alatt nem. Ha jól emlékszem 7-essel még ment a dolog.
De ha nem akarsz métereseket szívni a persistence.xml és tsai konfigurációjával, akkor miért nem csak springben rakod össze a datasource + JPA EMF csomagot?
<!-- setting up JPA EMF -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="dataSource"
p:packagesToScan="com.movietime.entities" >
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
<props>
...
</props>
</property>
</bean>
<!-- Transaction Manager -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="entityManagerFactory" />
<tx:annotation-driven />
<bean id="persistenceExceptionTranslationPostProcessor"
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> -
Lortech
addikt
válasz
Oppenheimer #7102 üzenetére
Szerintem az van, amit a hibaüzenet is mond, hogy ha JTA -t akarsz használni, akkor a persistence-unit-on belül kell egy <jta-data-source>$datasource</jta-data-source>
Ha meg nem JTA, akkor a transaction-type-ot át kell állítani RESOURCE_LOCAL-ra. -
jetarko
csendes tag
válasz
Oppenheimer #7102 üzenetére
Tipp:
Error creating bean with name 'emf' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException:
A spring xml-ben emf-t adtál meg, a repoban meg em-re hivatkozol.
Az xml fájlokban miért van annyi kommentezés?<!-- Use @Component annotations for bean definitions -->
<context:component-scan base-package="com.movietime.controller" />Itt szerintem fel kell sorolni azokat a packageket amikben @componentekre hivatkozol. Pl dao(repo) service csomagok is.
-
Oppenheimer
nagyúr
Betenném ide is életem első stackoverflow kérdését, hátha valaki tud segíteni.
-
CJ19
csendes tag
válasz
WonderCSabo #7099 üzenetére
Igen, tudom.
A kodot magamnak írtam ezert ilyen furcsa nevű változók/metódusok vannak benne..
de tény, ideje lenne átszokni az angol elnevezésekre! Köszi a tanácsot !
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- ÁRGARANCIA! Épített KomPhone Intel i9 14900KF 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- Hp Prodesk 600 G3/ G5/ G6 SFF-MT / i5 8-9-10 gen, Hp EliteDesk 800 G4 / Win11- Számla, garancia
- Mini PC, tiny PC HP Fujitsu Esprimo i5-7500T
- BenQ PD-3200-U Monitor - Designer 4K 32"
- HP Rack szerverek és tartozékok egyben vagy külön-külön
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: CAMERA-PRO Hungary Kft
Város: Budapest