- Philips LCD és LED TV-k
- Milyen billentyűzetet vegyek?
- Vezetékes FEJhallgatók
- Fejhallgató erősítő és DAC topik
- Mini-ITX
- Micro Four Thirds
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- 3D nyomtatás
- A Micron újszerű módszerrel javítja QLC-s SSD-jének sebességét
Új hozzászólás Aktív témák
-
togvau
senior tag
Van egy Item class, és egy Price class. Az Item-hez tartozhat sok Price, amik pedig 1 itemhez vannak kötve, de a hibernate azért is generál hozzá egy kapcsolótáblát, pedig szükségtelen. Miért?
Ilyen a kapcsolat a két osztályban:
Item:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "item", orphanRemoval = true)
private Set<Price> prices;
Price:@ManyToOne(fetch = FetchType.LAZY)
private Item item;Próbáltam @JoinColumn-al is, akkor is ugyan az. Egy netes példában is pont így csinálta, és mind2 megelőzte a kapcsolótáblázást, de nekem nem.
-
togvau
senior tag
Sziasztok!
A problem: van egy entity amihez ugye tartozik egy tábla, de vagy egy bonyolult összeszámolgatás, ami db view-el van megolda, ami ugyanolyan struktúrát ad vissza mint a tábla, így a valós tábla entityjének, és a view entityjének közös abstract osztály @MappedSuperclass az őse, így a 2 entity annyi, hogy név, extends... és fölötte @Entity, @Table...Gondoltam, hogy a közösséget megoldom azzal, hogy repository az abstracttal tér vissza, és a service castolja amire kell. De nem tudja castolni "No converter found capable of converting from type"...
mit nézek be? Talátam ezt a @SecondaryTable dolgot, de elég zavaros.
-
togvau
senior tag
válasz
Lortech #11717 üzenetére
Szűz springboot appnál a session scoped beanek tökjól működnek authentikáció nélkül. Securitys appnál nincs session, mindig elfelejtődik ugyanolyan beanekkel.
Úgyhogy deklaráltam egy mapet, aminek a kulcsa a principal.getusername, aztán abba rakosgatnak, vesznek ki a feldolgozók
-
togvau
senior tag
válasz
Lortech #11709 üzenetére
Na igen, ez a kérdés. Mert spring security nélkül, egy sima szűz springboot alkalmazásban, a restcontroller getmapping metódusainak httpsession id-je minden kérésnél különbözik, a session.setAttribute-ban állított dolog pedig mindegyik globális, mindegy milyen böngészőről/kliensről van a beállító kérés, mindegyiknek ugyan az lesz a getattribute valami értéke amit az egyik legutoljára settelt...
Most tényleg valami principal azonosítót kérjek le, és azokat kulcsként használva töltögessek egy adattároló map-et, ahonnan a kulcs alapján lekérdezhető az adott userhez tartozó adat?
Azt hittem hogy erre van valami belső megoldás mert azért nem hiszem hogy annyira réteg igény lenne. -
togvau
senior tag
Mi a legegyszerűbb módja springbootos, jwt springsecuritys, frontenddel rest-en kommunikáló alkalmazásnál az adott sessionhoz, vagy userhez kötött, több requesten átívelő ideiglenes adattárolásra?
Igazából annyit kellene tárolni hogy adott user sessionben hány requestje volt az alkalmazás felé, floodot megelőzni.
-
togvau
senior tag
Java 8-as maven projekt migrálása újabb, moduláris java verzióra pl 17-re hogy?
Van valami automatikus megoldás? Vagy manuálisan kell? :/
-
togvau
senior tag
Sziasztok!
Olyan ták feladatot kaptam, hogy a swaggeres apin kapott tömeges feladatcsomagot (hash generálás, de nem crypto
) valamilyen felhőszolgáltatáson futtassak meg, majd a kész csomagot vissza az apin.
Erre a fejemben összeállt egy fő alkalmazás, ami lekéri a feladatokat az api-tól, bedobálja a queue-be ahonnan a számoló kis alkalmazás példányok kiveszik, megcsinálják, majd a kész queue-be dobálják, ahonnan a fő alkalmazás kiszedi, és küldi vissza az api-nak.
Jól gondoltam ezt el? Milyen free szolgáltatás lenne ehhez a legegyszerűbb, és milyen kiinduló ponttal? (soha nem csináltam még felhős programozást, van aki az AWS-t ajánlja, de eléggé kaotikus az is) -
togvau
senior tag
Hashmap, meg minden erre alapuló ugye gyorsan tud keresni, kb függetlenül a benne lévő elemek számától.
De még is hogy találja meg azt, hogy a keresett hash az hol van? A doksi szerint linkedhashmap az alapja, de hogy találja meg a megfelelő node-ot, ha linkelve van? Hogy nem kell valahonnan elkezdve a linkeken lépegetni addig amíg meg nem találja a keresett keyt?Ha végiglépked, akkor csak azért gyorsabb mint egy list contains pl, mert nem equals megy többnyire, hanem hash==hash?
-
togvau
senior tag
válasz
Lortech #11443 üzenetére
Ez se nyert: https://pastebin.com/X4ibhvWh
Beletákolva valami httpclient függőséget már elindul, de amikor kellene csinálnia, akkor:org.springframework.web.client.HttpClientErrorException: 400 Bad Request
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:85)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:707)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:660)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:620)
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:414)
Az eredeti hiba a szokásos: https://pastebin.com/2RmS1DHS
-
togvau
senior tag
helllo, adott egy java 8 (adoptopenjdk) maven springboot projekt.
Innen egy webservicet használnék (ekáer), úgy tűnik resttemplate-el. A programozás része eddig egyszerű volt, de a rendszergazda rész megint szívat, mivel köszönhetően a tetves google-nek ez is SSL...
Jön is az imádottsun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Ezen szeretnék túljutni a lehető leggyorsabban, és legegyszerűbben. Nem érdekel az úgynevezett "biztonság". Hordozhatóvá szeretném csinálni, ilyen cacertes minden gépen ahol fut létrehozós, mindent servicet amit használ letöltős dolgokat el szeretném kerülni.
Azt szeretném, hogy az intellij fejlesztőkörnyezetből, meg war-ba csomagolva és akárhol indítva is ugyanúgy működjön, mindenféle gépenként rendszergazdás tákolás nélkül.
úgy szeretném mint böngészőből, be az url azt jóvan, működik, nem cert marháskodik.Hogy érhetem el ezt? Googlen nem működő, vagy nem ide vonatkozó, vagy hiányos leírásokat találtam csak.
-
togvau
senior tag
Hello
Csináltam egy sql view-et, ami ugyan azt adja vissza mint az eredeti tábla, csak picit módosítva (előjelet cserél pár szám mezőben).
Gondoltam, csak simán származtatom az eredeti classból az új entity-t, ami tök üres, mert mindent tartalmaz az eredeti, csak a @table name más.
Na hát elszállt, egy értelmetlen exceptionnal mindig, egy értelmetlen nevű oszlop hiányára hivatkozva, amit az SQL kiíratással sem lehet beazonosítani.
Akkor is elszállt, ha nincs is lekérdezés az új entityvel, hanem a régivel, eltelt egy kis idő, hogy rájöjjek, az új entityt el kell tűntetni, és jó lesz a régi... komolyan kiválóan van megcsinálva ezA lényeg, hogy a hibaüzenetek egyikére rákeresve, arra találtam, hogy itt konkrétan közös táblát akar találni, pedig nekem az kellene, hogy semmi közük egymáshoz, csak a struktúra ugyan az. Erre találtam az @Inheritance annotációt, aminek typejaiban nincs olyan, hogy ne inheritáljon semmit.
Most copy paste-ként származtatás nélkül jók az új entityk, de ez csúnya. Hogy lehet elérni, hogy felejtse el azt, hogy bármi közöset keressen a szülő, és az új entityben? @MappedSuperclass ugye nem jó, mert mindkettőnek entity-nek kell lennie, a szülőnek, és a gyereknek is.
-
togvau
senior tag
válasz
VikMorroHun #11379 üzenetére
Az indiai fejlesztők miatt, gondolom.
-
togvau
senior tag
válasz
sztanozs #11371 üzenetére
ezt én is megtaláltam, de itt is látszik, hogy nincs normális megoldás. Azért az vicc, hogy ennyire összevissza működik valami... simán IDE-ből futtatva a projektmappában keresi, *ar-ba fordítva windowson a *ar mellett, linuxon viszont a user home-ban... és ez lenne a multiplatform
Ez sem értem, org.javatuples csomaggal:
storeItemTupleList.stream().map(e -> e.getValue0()).collect(Collectors.toList())
Ez runtime hasal el:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to org.javatuples.Pair
Akkor is ugyan ezzel a hibával hasa hasonlónáll, amikor vaadin grid<Pair<BigDecimal, String> setitems-t hívok és ilyet raknék be List<Pair<BigDecimal, String>>
Ez is csak runtime.Ez miért van?
Nincs kedvem külön DTO-t tákolni...
-
togvau
senior tag
hogy lehet megaszondani, hogy a fájlt (string-ben van megadva a path majd Paths.get() ) az alkalmazás mellől olvassa? Tehát aprojektem mellé rakott fájlt akkor is ha IDE-ből indítom run-al, meg akkor is ha jar-ba van exportálva, és java -jar-al indítom.
Mert ugye ha simán fájl.txt akkor ide-ből indítva a projekt mappában keresi, jar-ba exportálva a jar mellett keresi, de mindenképpen relatív path maradjon, és kíndózon, linuxon ugyan az legyen a végeredmény. -
togvau
senior tag
válasz
Szmeby #11316 üzenetére
Én arra se emlékszem amit múlt héten olvastam, főleg ha nem találkozok rendszeresen az ott olvasott dologgal. Sajnos nem fér el a sok számot, kis-nagybetűt, és most már speciális karaktert is kötelezően tartalmazó jelszavak, meg az évszak divatjainak megfelelő frameworkok felesleges infoi mellé.
Annyira nem közismert, hiszen akkor a google-n rögtön kidobott volna rá ilyen megoldást, még is, erre a hibára csak a rossz importos válaszú dolgokat dobta fel.
Igényes munkát nem akarok végezni, hiszen egy igénytelen ürülékrakást kell úgy ahogy használhatóvá tákolni, hiszen újraírásra (amivel igényessé lehetne tenni) nincs pénzMi a nevetséges abban, hogy egy hiányosságot fikázok? Ez egy marhaság. Default mindkettőt néznie kéne. De legalább is specifikus errorban jelezni, hogy máshogy kéne.
-
togvau
senior tag
válasz
floatr #11314 üzenetére
húúú nem hittem volna, hogy ennyire gagyi
sajnos nincs kapacitás az 5642 divatos framework lelki világát, bugjait, hiányosságait bemagolni.
Hogy sikerült rátalálni? Én akárhogy is kerestem rá guglin, csak olyan jött ki, hogy nem azt a transient-t használja ami oda kell, hanem másikat. -
togvau
senior tag
JPA: eddig én a saját cuccaimban, és a munkáknál is az entity osztályoban a field deklarációk fölé raktam az annotációkat, pl a a kapcsolatok, vagy a @Transient-et is.
Mostani projektben a getterek fölött van, úgyhogy igazodtam ehhez, egy kivétellel amikor egy @Transient fieldet csináltam. Aztán folyamatosan elszállt runtime, hogy nem találja azt a fieldet... javax persistence transient volt pedig, de a spring datással is ugyan ez.
Aztán "áh ez már kb az imádkozás szint" átraktam a getter fölé, és megy...Ez WTF?
-
togvau
senior tag
sikerült ez is, meg másikat is, mindent full generikusra sikerült csinálni
-
togvau
senior tag
válasz
togvau #11309 üzenetére
Látom, elég csak a kimenetnél megszabni a korlátozást, és az a bemenetre is vonatkozik.
De újabb probléma: a newClass-nak vannak tételei is listában, minden invoice-nak saját fajta... azok is egy közös abstract osztályból származnak, de hogy tudok nem fixen létrehozni tétel osztályt?
kimeno.callTetelekLista().getClass().getGenericSuperclass(); talán így meg van a listaelemek osztálya (már ha akkor is működik ha a call null-t ad vissza, mert nincs list még hozzáadva)
(mert futás időben nincs generikus)De hogy ha van egy metódus, hogy getItemType és abba egyenként fixen meg van adva entitynként, hogy mi tartozik hozzá, akkor be tudom szerezni a classt. Viszont hogy hozom létre, hogy hozzáadhassam a listához? newInstance oké
-
togvau
senior tag
protected static KimenoSzamlaEntity getInvoiceEntity(AbstractInvoiceEntity originalEntity) {
KimenoSzamlaEntity kimeno= new KimenoSzamlaEntity();
BeanUtils.copyProperties(originalEntity,kimeno,"parentInvoice", "identifier");
List<KimenoTetelekItemsEntity> items=new ArrayList<>();
for (AbstractInvoiceItemsEntity item: originalEntity.callTetelekLista()) {
KimenoTetelekItemsEntity itm= new KimenoTetelekItemsEntity();
BeanUtils.copyProperties(item,itm, "parentInvoice", "identifier");
itm.setParentInvoice(kimeno);
items.add(itm);
}
kimeno.setTetelekLista(items);
return kimeno;
}
Erre valami tipp, hogy lehetne generikusabbá tenni? Pl hogy a "kimeno" típusa mondjuk bemeneti paramétertől függjön (de ne kelljen végig instanceofolgatni az összes lehetséges bemeneti osztályt), és amúgy extends AbstractInvoiceEntity.
-
togvau
senior tag
JPA entity abstract ősosztályának miért nem lehet abstract metódus deklarációja?
-
togvau
senior tag
Mi baja lehet?
SELECT new asd.dto.SzallitoiMegrendelesDTO(m.bizszam, AVG(tl.egysegAr), SUM(tl.mennyisegME1), SUM(tl.mennyisegME2), SUM(tl.mennyisegME3)) FROM Megrendeles m LEFT JOIN MegrendelesTetelek tl ON tl.parentInvoice=m WHERE tl.cikk... GROUP BY m.bizszam
Sumokat szépen megcsinálja. AVG viszont 0.0 a DTO-ban, ahol double típusnak volt megadva a field, mert ha bigdecimalra állítom adok meg sír, hogy nincs konstruktor double-val. DB-ben decimal típusúak amiket átlagolnia kéne, és ha a DB-n lefuttatom a queryt sima SQL-ben, jó az átlag is. Az entity-ben is bigdecimal, mégse engedi az. Fura, mert a SUM-ok azok bigdecimalok, és engedi a dto-ban is a bigdecimalt. AVG-nél nem.
-
togvau
senior tag
tehát nem lehet így. Ezt én is megtalátam.
Nem értem miért nem fejlesztik a JPQL-t is, vannak minden DB-ben működő, de JPQL-ben nem létező funkciók. Ez a találat limitálás tól-ig is ilyen. Van ahol "LIMIT" van ahol "TOP", de ugyan az az implementáció elintézné...Pár hónapja egyébként ilyen hibernate hackel raktam bele a GROUP_CONCAT-ot (amit szintén szinte minden DB tud, ez esetben a H2 is, csak JPQL-ben nem volt ilyen):
public class SqlFunctionsMetadataBuilderContributor implements MetadataBuilderContributor {
@Override
public void contribute(MetadataBuilder metadataBuilder) {
metadataBuilder.applySqlFunction("group_concat", new StandardSQLFunction("group_concat", StandardBasicTypes.STRING));
}
}
Aztán ment pl:...dto.Photolist(p.user.id, GROUP_CONCAT(p.id)) FROM Photo p WHERE p.user.id IN ?1...
Lehet itt is kipróbálom... majd munkaidőben
-
togvau
senior tag
Rá kellett jönnöm, hogy a spring data nem olyan okos, mint hittem, így ha a @Query-s repositoriy metódus szignatúrájában nem lista van, hanem pl string, akkor nem tol egy LIMIT 1-et a DB-felé, hanem működik amíg egy találat van, és exception amint több is van...
Szóval hogy lehet korlátozni 1-re a találatok számát, natív query nélkül?
Tényleg az a legegyszerűbb, hogy a service-ben csak kiveszem a lista első elemét? Tákolásra kényszerít?
(metódusneves query leírás nem játszik, túl bonyolult ahhoz a query (pedig nem is igazán bonyolult)) -
togvau
senior tag
válasz
disy68 #11295 üzenetére
nem is akarok használni, de a példákban más megoldás nincs, lásd ott a fetch és mégse.
Az elméleletet tudom, meg azt is, hogy az jpa-nál ritkán stimmel a gyakorlattal, ahogy itt se.A gyors megoldás az lett, hogy a service-ben nyomok egy gettert a sub entitykre semmibe vezetett eredménnyel, és utána már jó lesz a servicen kívül is.
De inkább azt választottam, hogy a
@Fetch(value = FetchMode.SUBSELECT)
-et átírtam FetchMode.JOIN-ra. Hogy ez most bug, vagy feature, nem tudom, mindenesetre logikát nem látok benne... úgyhogy a bug a valószínűbb.
Azt nem tudom mit csinál, nem is érdekel, ennek a rakás ürülék alkalmazásnak ez a legkisebb gondja -
togvau
senior tag
LazyInitializationException-t hogy lehet megoldani, EAGER-re állítás nélkül?
@Transactional ugye szokás szerint nem működik, a fő entity lekérdezése ugyan abban a @Transactional metódusban van, mint a subselectes getter hívása. Igaz, hogy nem is service layeren van, mert ez ugyan az a rakás... még mindig.@OneToMany(mappedBy="parentInvoice", fetch= FetchType.LAZY, cascade= CascadeType.ALL, orphanRemoval=true )
@Fetch(value = FetchMode.SUBSELECT)
public List<ItemsEntity> getItemList() {
return itemList;
}
Már volt ilyen gondom, máshol, csak már nem tudom hol, csak arra emlékszem, hogy ott sem volt jó egyik dolog sem az EAGER-t leszámítva, amit a google kidob erre a hibára, de sikerült EAGER nélkül valahogy.
-
togvau
senior tag
javax.persistence.schema-generation.scripts.action-nél nincs olyan, hogy update, pedig ha nem scriptet kell generálnia, olyan szép alter table-ket tud csinálni.
Nem lehet kicsikarni belőle, hogy scriptbe rakjon update ddl-t? Nem akarok kézzel alter tablezni... -
togvau
senior tag
Szeretnék egy két entity dolgot logolni, így beraktam az ős abstract entity-be, hogy
@Transient
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
aztán random leszármazott entity-knél:
java.lang.IllegalArgumentException: Could not resolve property name logger from Property set for bean
Miért? Miért random, és hogy lehetne megcsinálni?
-
togvau
senior tag
Van egy fieldem amiben az osztályom amiben generikusan másik osztály van, az abstract osztályban van deklarálva kell ennek a generikusban lévő osztály ősének metódusa, de a leszármazott osztályban már nem elég az őse, kellenek a fejlettebb metódusok is, de castolni nem tudom, nem engedi.
Pl: nem optional az osztály, csak azzal tudom szemléltetni abstract class: protected Optional<AbstractOsztály> valami=new Optional<AbstractOsztály>();
Leszármazott osztályban is használnám ezt Optional<LeszármazottAbstractOsztály> valami2= (Optional<LeszármazottAbstractOsztály) valami;De nem engedi. Mi a megoldás ha egy ták projektnél, egy abstractban view osztályban deklarált abstract osztályú field, subclassban kiterjesztett metódusait használhassam a a leszármazott view osztályban, felüldefiniálás nélkül?
-
togvau
senior tag
válasz
M_AND_Ms #11271 üzenetére
projekt összehasonlításra a Meld-et találtam közbe, annak már nem voltak hamis találatai.
Most a nyomorék projektben, bigdecimmal szenvedek. Vaadinos felület, a numberfieldnél ,-re van állítva a decimal separator, és a ,-t is veszi tizedesvesszőnek ha írok be valamit.
De fordított iránynál, amikor a mezőt állítja be a kód, .-ot rak tizedesvesszőnek.
pl így állítja be: mennyisegMe3.setValue(me3.doubleValue());
Pont jelenik meg. Próbálkoztam locale-t is beállítani, semmi hatás. -
togvau
senior tag
válasz
floatr #11267 üzenetére
közben meglett, picit máshogy: mvn package
2 kérdés:
-Kellene valami tool amivel teljes java projekteket lehet összehasonlítani, java fájlonként, tartalomra. Total commander synchronize dirs volt eddig, de most nem... minden java fájlt különbözőnek érzékel, és különbözik is a mérete byte-ra, de a tartalom nagyrésze egy az egyben ugyan az. By content checkbox nem segít, karakterkódolás pedig azonos, nincs fájl végi sortörés különbség sem-Van olyan tool amivel kigyűjhetőek, akár a pontosan egyező metódusok is? Mert az a szerencsétlen aki csinálta, még metóduson belül is 10 soros kódokat ismételget, azonos copy-paste metódusokból is sok van.
Persze az is hasznos lenne, ha a feltűnően hasonló kódrészletekre is figyelmeztetne, hogy azt egységesíteni lehet. -
togvau
senior tag
Hogy lehet egy springboot maven projektet jar-ba exportálni? A lehető legegyszerűbben kéne, amit elindítok eclipse-ben van intellij-ben, azt egy futtatható jar-ba
-
togvau
senior tag
válasz
disy68 #11259 üzenetére
docker build-el. Valami maven wrappert írt, hogy be kell rakni a projektbe, az benn is van.
Igen rákerestem, a java írja, hogy nem jó a jar. Pedig a hivatkozott jar még eredetiben simán indul, ugyan az alatt a 14-es jdk alatt.
Megnéztem az argumentumot, de nem találja, mivel a docker linux fájlrendszerében keresi, nem az igaziban. -
togvau
senior tag
válasz
Superhun #11256 üzenetére
köszi, ez király dolog! Éreztem, hogy van valami ilyesmi
dockeresíteném (próbából) az egyik sima springboot teszt cuccomat, amiben embedded H2 van.
De ahogy egy régebbi node-os probálkozásomnál is, itt is egy soros semmit mondó hibaüzenettel száll el a run, de a build az rendben van mindig.Error: Invalid or corrupt jarfile /app.jar
Ez a dockerfile
FROM openjdk:14-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} /target/wishlist-1.0-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Le van buildelve a jar, ott van a helyén a targetban.
Még is. Amúgy ha arg-ot adnék meg azt, hol adjam meg? A formátumára vagyok kíváncsi.
Amúgy egy vindózos gépen fut, de lásd a backslashek per jellé vannak alakítva. -
togvau
senior tag
spring nem tud véletlenül olyasmit, hogy az adatokat módosító, vagy létrehozó queryket követni lehet? Eseménynaplóhoz kellene, ahol a módosításokat kell logolni
-
togvau
senior tag
Vindózon van egy openjdk 14, csak úgy kicsomagolva, hozzáadva a path-hoz, meg java_home beállítva.
Tennék fel mellé egy 8-as JDK-t is, de nem tudok. Az openjdk elirányít az orákle oldalára, ha 8-ast keresek, ahol csak telepíthető van, ami valahogy kisajátít minden javas alkalmazást, és az futtatja, de hogy hogy, azt nem értem, mert a path-hoz, és javahome-hoz nem ad semmit.
Linuxon meg csak simán az apt-al rakhatok fel 8-as, és legújabb javat is.
Hogy lehet megoldani, hogy az elsődleges a 14-es openjdk legyen, de adott projekthez, aminek a pom-jában 1.8 van, ahhoz a 8-ast használja? És hogy telepítem? Tényleg 7zippel kell kihackelni az oracle telepítőből?
-
togvau
senior tag
válasz
floatr #11190 üzenetére
Ha feljoinolom a hozzá tartozót (userpropertiest), akkor is több queryt csinál. Fetch joinolni meg nem lehet, mert nem tudom mi neki a szükséges parent, mert már az összes entityt kipróbáltam a select listába rakni, de mindig azt írja, hogy a parent nincs a select listában.
Nem is production volt a cél, akkor már nem kell percenként újraindítgatni.
De meglett a megoldás, valami cachelési feature okozza, amit a jdbc url végére ;MV_STORE=FALSE rakásával ki lehet iktatni. -
togvau
senior tag
Másik: jpa-hoz lightosabb DB szerver, ami normálisan működik, és jól, és tudja azt mint egy nagy szerver? A H2 néhány alkalmazásindításonként összechunkolja a db fájlt.
-
togvau
senior tag
SELECT i.targetuser.id,i.id, i.targetuser.userProperties , i.interactiontime FROM Interaction i INNER JOIN Interaction it ON i.owneruser = it.targetuser WHERE i.owneruser.id = ?1 AND i.targetuser =it.owneruser
Interaction entity User entitykre mutat, a userhez meg tartozik userproperties entity, 1-1 kapcsolatban.
Itt a fenti kimenet kellene, csak 1 queryvel (mert ez 2-t eredményez, 1x ez a query, majd anyiszor userproperties query, ahány sor az eredmény.Ezt hogy lehetne 1 querybe rakni konkrétan? @Transactional nem használ, ha join fetchelni akarom a userpropertiest, mindig sír, hogy a parent object nincs a select listben, akkor is ha ott van (pl nem csak targetuser.id hanem targetuser).
-
togvau
senior tag
Ez a join fetch korlátoltság megkerülhetetlen? Csak akkor lehet használi join fetchet, ha fetchelt tábla szülője egészben ott van a select list-ben. Csakhogy nekem NEM KELL a teljes szülő, csak 1-2 field belőle...
-
togvau
senior tag
válasz
Szmeby #11184 üzenetére
ott ahol 1-1 van, ott onetoone is van.
Kipróbáltam viszont egy ilyet, hogy végül is 1 lekérdezésben legyen minden ami épp kell
@Query("SELECT u.id, p, (SELECT ph.id FROM Photo ph WHERE ph.user.id = ?1) FROM UserProperties p LEFT JOIN FETCH p.user u WHERE u.id=?1")
public Triplet<Long, UserProperties, List<Long>> stb...
erre: jdbcSQLDataException: Scalar subquery contains more than one row; SQL statement
És ez igaz is, pont azért van ott long list. Akkor miért sír? -
togvau
senior tag
válasz
Szmeby #11178 üzenetére
nem. Az ugyan azt írja 20x, ahogy szokta, hogy nem talál megfelelő osztályt a szerializáláshoz (mert nincs is olyan félig összeszedett entity), de amúgy a json serializációig minden rendben, előtte kiíratom a visszaadott objektumot, onnan is látom, hogy spamet rak bele.
Nagyon furán működik ez a spring data.pl van 2 entity, 1-1 kapcsolattal. Kellene nekem a "gyerek" összes infoja, a szülő id-ja alapján.
@Query("SELECT p FROM UserProperties p INNER JOIN User u ON u.userProperties = p.id WHERE u.id=?1")
@Query("SELECT u.userProperties FROM User u WHERE u.id=?1")
2 queryt eredményez mindkettő, ahol összejoinolja ahogy az első queryben van, majd még egy query ahol a User-t lekérdezi ugyan olyan where-el... tehát 2x megcsinálja ugyan azt. Akár lazy, akár eager a kapcsolat. Akkor is megcsinálja, a user repository findbyid-t nyomok.Ok hogy id alapján történik minden, ami szinte ingyen van, de na... Tényleg csak natív queryvel lehet beleverni, hogy egy queryvel megcsinálja ezt? Vagy a spring show sql nem azt írja ki ami tényleg történik? Vagy el van cseszve a H2 driver?
-
togvau
senior tag
Van egy Entity, aminek vannak al entity-jei, Set-ben. E set fölött ezek az annotációk vannak:
@OneToMany(fetch = FetchType.LAZY, mappedBy ="user" )
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@JsonIdentityReference(alwaysAsId = true)
Ez jól is működik, ha konkrétan ezt az entityt kérdezem le, spring data crudrepository findbyid-vel, szépen a set-ben lévő entityknek csak az id listáját adja vissza.De ha egy jpql query-ben van, ami egy DTO-t csinál, és annak az egyik tagja a fenti fő entity, akkor a @json annotációs gyerek entityknek visszaadja az id-jait, mellettük még másik fieldjét is, ami mellett egyébként még 2 van, amit meg nem ad vissza...
Nem értem, hogy itt miért nem az id listát adja vissza, és azt sem, hogy miért csak azt az 1 fieldet adja vissza, mikor ott van még 2.
Miért adja vissza ugyan azt az entityt 2 queryben teljesen különbözőképpen?
-
togvau
senior tag
válasz
floatr #11173 üzenetére
ja tényleg, transient, jó ötlet! A többit is megnézem majd.
Most a hype UI-val ismerkedek (angular), és abban van egy ilyen a példában, hogy : import { Observable } from 'rxjs/Observable';
erre azt írja, hogy
node_modules/rxjs/Observable"' has no exported member 'Observable'.ts(2305)Mit kéne ezzel csinálni, hogy ne írja?
fogalmam nincs mit csinálok,de ilyen npm install rxjs-t nyomtam, de nem nyert, lett valami rxjs a node modules-ban, de a kisbetűs observable mappában nincs observable fájl.
szerk: meglett, a vscode megtalálta ott, ahol nincs, de biztos így van, hiszen javascript ahol minden lehet bármi is, meg semmi is.
-
togvau
senior tag
belefutottam egy hasonlóba: https://stackoverflow.com/questions/47640698/com-fasterxml-jackson-databind-ser-beanserializer-serialize-spring-jpa
Úgy tűnik, hogy ha rest-ben lekérdezett entity-ben van kapcsolat másik entity-vel (gazdájával), és ez oda vissza jelölve van (onetomany->manytoone), akkor jsonizáláskor végtelen ciklusba fut. Ezt megoldotta az, hogy a @Jsonignore-t raktam a gazda entity kapcsolat field-nél, így az egész gazda entity kimarad a visszaadott jsonből..
De mi van, ha én szeretném a gazda entity id-ját (mást nem) is visszaadni rest-en? Tudom, saját DTO létrehozással, és query utáni oda-vissza konvertálásával lehetne. De nincs rá valami annotációs okosság?
-
togvau
senior tag
frissítettem linuxos kis szerveremen java-t 11-re. Az eddig java 8-on futó kis servlet most:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
Nincs máven, és nem is szeretnék belemódosítani a jar-ba.
Van rá megoldás azon kívül, hogy visszateszem a 8-at? -
togvau
senior tag
megint szívás a keveréssel... spring MVC controller, JSF-el. Tökjó volt addig, amíg nem kéne egy jsf oldalt GET url paraméterrel megnyitni.
De ott elakadtam:@GetMapping(path = "/public/list/{id}")
public String publicwish(@PathVariable long id, Model model) {
System.out.println("Controller:"+id);
model.addAttribute("id", id);
return "public/list.xhtml";
}nem spring controllernél van az f:viewParam, de itt sehogy se működik. 1 darab id-t kellene csak a jsf managedbeannek eljuttatni, akárhogy. Ezt a model-t se tudom hogy lehetne elérni jsf-ből. A returnbe bármi mást írok, akkor 404 lesz. Így bejön az id a controllerhez, de a jsf-be nem megy tovább. Erre mi a megoldás?
Najó találtam rá egy megoldást, de az igen csúnya
-
togvau
senior tag
nem túl fontos, csak optimalizációs kérdés:
van egy jpql query, hogy pl:SELECT w FROM Stuff s JOIN User u ON s.owner_id=u.id WHERE u.id=?1
De itt épp nem kellene semmi a User-ből, szükségtelen a join, az owner_id-re keresni a where-ben elég lenne.
TehátSELECT s FROM Stuff s WHERE s.owner_id=?1
de így elszáll, hogy nem találja az owner_id-t, pedig DB szinten van ilyen, csak entity-ben ugye User owner van.
Ilyet így csak natív queryben lehet?
Vagy ilyenkor a DB okosan egyszerűsít, és tudja, hogy a 2.-al kiváltható az első query? -
togvau
senior tag
Na beszívattam magam... már nagyon keveredtek a dolgok, nem akarom újraírni.
Szóval spring MVC, security+JSFMűködik minden, addig, hogy kellene az egyik jsf oldalon egy lekérdezés, ami az oldalt megnyitó belépett org.springframework.security.core.userdetails.User adatai alapján kérdez le.
@Controller-ben tökegyszerű, csak egy @AuthenticationPrincipal MaiUserDetailz user paraméter kell a metódusba. De ez csak @Controller-ben használható, és nekem a @Service-ben kellene, vagy ha nincs rá más megoldás, akkor a jsf beanjének átadni valahogy.
Erre valami ötlet?
-
togvau
senior tag
Ezt meg tudja nekem valaki magyarázni?
JSF frontend, springboot-mvc-data backend. Júzer módosító felületen, egy @PostConstruct init metódus van, ami betölti a júzer listát, egy @Autowired @Service metódust hívva, ami Crudrepositoryt hív.
Ez rendben is megy. Módosítok a felületen (jelszó változtatás), ami hasonlóképpen történik, de hogy a változások rögtön látszódjanak, a JSF managedbean (ami a spring miatt inkább @Component) metódusa ami a servicet meghívja, az újra meghívja az initet, ami szintén, csak a lekérdezést.
Ez megint oké. De ha 2. alkalommal is módosítok valamit, akkor hibernate lazyinitialization exceptionnal elszáll, és mindig ugyan ez lesz ezen túl, ha reloadolom az oldalt, akkor is.
Ha nem megyek el eddig a 2. módosításig, vagy előtte reloadolom az oldalt, nincs ilyen probléma. Akárhányszor nyomogathatom az újratöltést, annyiszor lekérdez, nincs lazy probléma.Mindegyik service metódus javax.transaction. @Transactional
A furcsaság amit itt észrevettem, hogy az első módosítás utáni frissítésnél, ha a managedbean metódus hívja meg az initet, akkor csak a fő tábla selectje megy le, az ahhoz kapcsolódó entityké nem. De ha böngészőben reloadot nyomok, akkor kapcsolódókat is selecteli.
Ugyan az a metódus 2 féle képpen működik? -
togvau
senior tag
válasz
disy68 #11042 üzenetére
pl
mvc.perform(MockMvcRequestBuilders.post("/user").header(HttpHeaders.AUTHORIZATION, "Bearer "+testToken).contentType(MediaType.APPLICATION_JSON_VALUE).content(json)).andReturn();
így. Ha kihagyom az autentikációs tokent, akkor is megy. Úgy megy, hogy semmilyen jogosultsági beállítást nem állítottam a tesztben. Ugyan ennyivel elindítva postmanből szépen unauthorized, ahogy kell.A másik, pedig hogy a beadott DML sql-ben lévő insertek lefutnak még egyszer (constraintviolationnal, mert már ugye betöltötte a DB-be), amikor egy ahhoz köze nincs, rest hívást csinálok először. Utána újra próbálva ugyan az a rest hívás lemegy.
Így an a DML beadva az application.properties-ben:@Transactional
@PostMapping(path = "/user")
@ResponseBody ResponseEntity<InfoResponse> createUser(@RequestBody UserDTO userDTO) {
User newUser = new User(userDTO);
return InfoResponse.createResponseEntity(ResponseTypes.SUCCESS, "new user id: "+userRepo.save(newUser).getId(),HttpStatus.CREATED);
} -
togvau
senior tag
válasz
disy68 #11040 üzenetére
pontosan azt, amit írtam. De lefut az alkalmazás, elindul ugyan úgy mintha simán futtatnám, lefuttatja a teszteket, majd leállítja.
És most az újabb dolog amit szeretnék el,érni, az az, hogy ne csaljon a springboot junit test, és ne god mode-ban hívja meg a rest szolgáltatásokat, hanem autentikálni kelljen, csak úgy mintha postmanból hívnám.
-
togvau
senior tag
Hogy lehet elérni, hogy a springbootos app maradjon futva a junit tesztek lefutása után, ne lője le az egészet?
Sőt az lenne a jó, hogy ha választhatnék, hogy indítsa el az egészet, vagy maradjon mindig futva az app, és akárhányszor újrafuttathatom a junit tesztet -
togvau
senior tag
JPA-ban van arra automata lehetőség, hogy a fő entity, és a hozzá tartozó al-entity-ket egyszerre rakja a DB-be? Tehát van egy fő entity, amihez kapcsolódhat sok al-entity.
Mert fő entity save-nél csak a fő entity elemeit menti le, a benne lévő al-entityket nem.
Tényleg csak selectkor képes összeszedni mindent, máskor szájba kell rágni az egyértelműt? -
togvau
senior tag
válasz
floatr #10990 üzenetére
Most kellett
Linkeltem fent a bugot, ami valahol van... exception alapján spring data-ban van, de a workaround az egy criteriaquery, aminél nem jelentkezik ugyan az a bug:@Query("select p.id from Photo p where p.user = ?1")
List<Long> findIdsByUserId(long id, boolean restricted);
Ez elhasal, a linkelthez hasonló: org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [34] did not match expected type... -alMíg ugyan az a lekérdezés (kicsit még kibővítve), criteriaqueryvel, ugyan olyan metódusparaméterekkel, fut ahogy kell:
public List<Long> findIdsByUserId(long id, boolean restricted) {
var cb= em.getCriteriaBuilder();
var ids=cb.createQuery(Long.class);
var root=ids.from(Photo.class);
ids.select(cb.construct(Long.class, root.get("id")));
var pred= new ArrayList<Predicate>();
pred.add(cb.equal(root.get("user"), id));
if (!restricted) pred.add(cb.equal(root.get("restricted"), false));
ids.where(pred.toArray(new Predicate[pred.size()]));
return em.createQuery(ids).getResultList();
}
fura. user= User entity kapcsolat, ami DB-ben egy BIGINT-et jelent user_id mezőben.
-
togvau
senior tag
válasz
floatr #10988 üzenetére
Jaj de bonyolult, és csúnya. DeltaSpike-nál létre lehetett hozni interfacet extends EntityRepository, ahol csak @Query elég volt, ahol meg vegyesen kellett @query, és rendes metódus is, ott abstract class extends AbstractFullEntityRepository, aztán abstract metódusnál csak @query, nem abstractnál meg minden más.
Vannak bajok ezzel a spring datával, belefutottam ebbe is [link], csak sima long-al. Akkor jön elő, ha entity kapcsolat van 2 tábla között. Bár a kapcsolat DB szinten sima id-kkel van meg (bigint-ek), id alapján queryben mégse lehet szűrni, mert bár a query paraméter long, ami jó a biginthez, de spring data azt már entity-nek látja, amivel nem stimmel a long...
Akkor lehet választani, hogy vagy entity szintű kapcsolatok, vagy optimalizált lekérdezések... bár criteriaqueryvel nem próbáltam még. -
togvau
senior tag
válasz
floatr #10984 üzenetére
Köszi, így érthető!
Manuálisan pedig entitymanager begintransactionnel lehet kezdeni, és flush-al lezárni?Ezt viszont megint nem értem:
Ez volt: (működött az autowired)@Repository
public interface PhotosRepo extends CrudRepository<Photo, Long> {Ez lett:
@Repository
public abstract class PhotosRepo implements CrudRepository<Photo, Long> {
@PersistenceContext
private EntityManager em;
és mellé autowirednél:
.NoSuchBeanDefinitionException: No qualifying bean of type 'org..asd.db.repository.PhotosRepo' available: expected at least 1 bean which qualifies as autowire candidate.
Miért? -
togvau
senior tag
spring JPA tesztelgetés_
Van egy junit teszt class, ahol az egyik tesztben létrehozok B entityt, amit egy A entitybe illesztek (onetoone, lazy, nem cascade kapcsolat), és save a repoval.
Aztán, ha ezt le akarom kérdezni findAll-al az A entityket amihez ugye tartozik a B entity is, akkor exception: no session.
Ha Cascade.ALL-on van akkor nincs hiba. Ahogy akkor sem, ha a lekérdezős metódus springes @Transactional.
Nem értem, hogy hova tűnik a session? Mi köze egy független select-nek tranzakciókhoz? -
togvau
senior tag
Én nem értem ezt a ThreadLocal témát, vagy is azt nem, hogy mire jó. Én ott tartok még, hogy static az elérhető a threadek közt, nem static mező meg minden threadnek saját, mivel a thread is ugyan olyan példány lesz, mint bármelyik osztály.
Vagy ez csak annyi, hogy ne kelljen cloneolgatni valahol, ha mégsem static dolgot használ? -
togvau
senior tag
próbálom megérteni a streamek furcsaságait, de nem sikerül:
Arrays.asList(asd).stream().forEach(System.out::println);
Miért nem írja ki a lista tartalmát? Egy ref stringet ír ki, gondolom a stream-ét.for (int j : asd) {
System.out.println(j);
}
A klasszikus foreach meg simán működik, ahogy kell.Miért?
-
togvau
senior tag
válasz
MrSealRD #9782 üzenetére
most nem tudom elérni, de nincs is értelme. Semmi értelmes nincs az exceptionban, ugyan az vagy 10x unmarshalling ? jaxb akármi at (és persze egyik at sem az én kódomra mutat). Ha elrontom a date formátumát, akkor legalább amiatt sír, de ha kijavítom, akkor már ?
#9783: igen, tényleg ? van... a response az a soapui szerint tökéletes... ugyan is az csinálja, az a mockservice
ugyan abból a wsdl-ből, konkrétan ugyan arra a fájlből van generálva a kliens, és a soapui dolga is.
-
togvau
senior tag
Sajnos 8 év után újra web servicekkel, és soappel ver a sors. Van egy webservice kliensem, aminek a requestjére érkező response, kb 10 darabb " unmarshalling exception: ? "-t okoz.
Hogy lehet a ?-et debugolni? Sajnos a ? cause nekem túl bőbeszédű, nem tudom melyik részét nézzem. Akkor rég úgy ment, hogy 654x újra és újra átnéztem mindent, majd újra... tényleg nem történt ezekben a borzalmakban fejlődés? Vagy van valami trükk? -
togvau
senior tag
Java 8-al jól működik a program, java 9-el NoClassDefFoundError. Amit nem talál, a jar-ban lévő lib jar. Mi a legegyszerűbb megoldás, a java 8 runtime-al indításon kívül?
-
togvau
senior tag
Én ilyet még nem láttam, csak azt hogy mánágereknek van egy büfé-ruhatár szak mellé nagy arcuk, pszichopatikus jellemzőik, félinformációkból "a szomszéd józsitól aki ismeri a testvérének a főnökének a fiát aki ért hozzá" tájékozódva, a divatos technológiákat nyomják keresztük "ha mások szeretik, nem lehet rossz"
-
togvau
senior tag
-
togvau
senior tag
Mindenhol a mánáger találja ki (najó kivéve a kis fejlesztőcsapatokat ahol kb mindenki egyenrangú), mert ezzel tudja fenntartani a látszatot, hogy rá szükség van, és csinál is valamit a "csicskák" munkájának lefölözésén kívül
Na és ők azok akik a divat szerint választanak.
-
togvau
senior tag
válasz
Aethelstone #9639 üzenetére
igen, el kéne felejteni, mert elavult, nagyon régi dolog, és ahogy látom 9 év alatt minimális fejlődés jött össze, de maximális mennyiségű új bug. De sajnos sok helyen ragaszkodnak a régi dolgokhoz, mert a mánáger kitalálta.
-
togvau
senior tag
Egyszerűen, ha nem lett elküldve az adott jsf oldalon legalább 1x már form, akkor nem biggyeszti be az outputlink a servlet mapping /faces-ét az url-be, ha pedig már volt form küldve, akkor igen... szépen fejlődik visszafelé a dolog, 9 éve még ilyen probléma nem volt, bár akkor is sok jsf, és AS bug volt.
-
togvau
senior tag
Rájöttem, sehogy. (legalább is úgy, hogy egy includeolt form működjön).
Az mitől van, hogy egy h
utputlink-re való kattintáskor
org.apache.jasper.JasperException: java.lang.NullPointerException
-al száll el, ha előtte nem küldtem el legalább 1x formot, és működik a linkelés ha már küldtem formot? -
togvau
senior tag
Kellene JSF-ben az <ui: taglib, de most az eclipse segítsége nélkül kell írtnom a jsf-et? Mert már amikor beállítom a JSF facetet, kiválasztom hogy a runtime libraryjait használja (mert írja is hogy az tud ilyet szolgáltatni), de aláhúzza a taglibeket "Can not find the tag library descriptor for "http://java.sun.com/jsf/core" és persze a kiegészítés sem megy. Csak akkor megy, ha userlibként behúzok 2 jsf jart.
Szerk: most működik a kiegészítés (bár ugyanúgy aláhúz), de ugyan azok jelennek meg benne mint a <h:-ban hiszen ugyan az a taglib uri is.
Mi az isten van ezzel a JSF-el hogy tele van ilyen összevissza, nem létező tageket használó egymásnak ellentmondó tutorialokkal a net?
Hogy a tudok egy nyomorék jsp/jsf fájlba egy másik jsp/jsf fájtl includeolni, javascript libek nélkül?
-
togvau
senior tag
válasz
Lortech #9634 üzenetére
A linkelt oldalon ott van, hogy nem csak ott lehet(ett), de a másik oldalon meg az látszik, hogy wildflyon már nem úgy, de hogy hogy az sehol sincs.
standalone.xml-el meg nesze neked nagyban hangoztatott javas hordozhatóságmellesleg elég gagyi megoldás.
Akkor elengedem a JAAS-t, mert a nem JAAS megoldás pár perc alatt összejött, úgy ahogy kéne, csak az nem "szabványos". -
togvau
senior tag
válasz
Lortech #9632 üzenetére
Tudom milyen a userroles, azért írtam át org...akármi...database-re... csak lehet nem abban a fájlban ahol kéne. De éppen, hogy a standalone.xml-es gányolást akarom elkerülni, és valami projectben lévő xml-es megoldást használni, ami jbosshoz le van írva, de wildflyon úgy látszik már máshogy van, csak nincs leírva hogy, mert a normális dokumentáció az luxus...
Bárcsak ejb meg jpa logint írhatnék... de jó dolog is programozni, és nem konfigurálgatni, és azt kutatni, hogy az ami volt konfiguráció az most nem az, de nincs sehol leírva hogy mi... De hát 20% programozás, 80% xml matatás(konfiguráció), és hogy hol kell elhelyezni, és hogy kéne kinéznie az xml-nek.
-
togvau
senior tag
Találtam egy ilyet [link]
Így tetszene, talán így nem lenne olyan szívás JAAS-t beállítani. De ez még jbossra van írva de itt nem írja hogy lenne ilyen "[domain_name]-jboss-beans.xml" a wildfly-ban.Na meg nekem adatbázisból dolgozó login modul kéne, de ha rákeresek wildflynál mindenhol azt írják, hogy code="Database" a jboss doc-ban meg egy ronda org.jboss.security.auth.spi.UsersRolesLoginModule-van, akkor gondolom wildflyban is hasonló kéne legyen nem?
Az kéne, hogy a jsf oldalakhoz JAAS belépés után lehessen hozzáférni, valamelyikhez adminként, valamelyikhez nem adminként, és a belépés után a belépett userről tudjak valamit (legjobb egy user entity lenne, de ha van egy username már az alapján is lekérdezhető az entity).
A JPA háttér a user entityket használja más táblákhoz kapcsolódva is, és a user entityből azonosítani is lehet mindent, de úgy látom jpa-s JAAS azonosítás nincs, csak sima jdbc, de az is jó lenne, csak hogy?Mert mindenféle összefüggéstelen egymásnak ellentmondó, ősrégi "tutorial" van erről...
-
togvau
senior tag
válasz
Lortech #9628 üzenetére
Köszi, éééés működik az egyik összefüggős táblába adás már, egy @ManyToOne hozzáadásával. Ennyi kellett. De fura, mert a jpa tools entity-tábla generátor megtalálta enélkül is az összefüggéseket (mert FK-zot), és jól generálta a táblákat ehhez.
A factoryt pedig már static singletonosítottam, és az entity manager is entitykezelő (session scoped) osztályonként singleton.
Másik (szintén kapcsolatban lévő) táblánál, mivel nincs ID-nek való egyedi adat, ezért külön int id van definiálva, simán @GeneratedValue.
De először is, egy hibernate_sequence nevű táblát keresve száll el, de a jpa tools sima sequence nevűt generál. Átneveztem, így elindítva már azon száll el, hogy ebben nincs next_val nevű oszlop IDENTITY stratégiával.
Egyik módszer sem működik. Komolyan olyan buta a perzisztenciaréteg, hogy nem tud egy üres táblában mondjuk csak simán 0-val kezdeni, és mindenféle táblák kellenek neki? -
togvau
senior tag
válasz
Lortech #9624 üzenetére
És ezt a merget-t hova kell tenni?
Mert így ugyan az a hiba. (getgod() konkrétan az adatbázisból kérdezi leg a god entity-t, ami egy user.
EntityManager em= getFactory().createEntityManager();
em.getTransaction().begin();
Event evt= new Event(new Date(),em.merge(getGod()),event, success);
em.persist(evt);
em.getTransaction().commit();
em.close();#9626 az még lehet más más állapotból volt, most username van, és amiatt sír, hogy "Unknown column 'username' in 'field list'"
De érdekes, mert az events-ben nincs username, hanem username_username-t generál oda a jpa tools, ahogy az applicant osztályban is applicant van, és applicant_username-t generál az adatbázisba. A username az events-ben és az applicant entity-ben is igazából egy hivatkozás az XUser entity-re
@Entity
public class XUser implements Serializable {
private String name;
@Id
private String username;
private String password;
private UsrType type;
@Entity
@Table(name="Events")
public class Event implements Serializable {
@Id
private Date date;
private XUser username;
private String event;
private boolean success;
@Entity
@Table(name="Applications")
public class Application implements Serializable {
@Id
@GeneratedValue
private int id;
private XUser applicant;
private float amount;
private boolean approved;Lehet bugos a JPA Tools table from entities generátora?
Szerk:
kipróbáltam azt hogy stimmeljen pontosan a név, tehát@Entity
@Table(name="Events")
public class Event implements Serializable {
@Id
private Date date;
@Column(name="USERNAME_USERNAME")
private XUser username;
private String event;
private boolean success;De ez sem nyert:
"Cannot add or update a child row: a foreign key constraint fails (`ulytestdb`.`events`, CONSTRAINT `FK_Events_USERNAME_USERNAME` FOREIGN KEY (`USERNAME_USERNAME`) REFERENCES `xuser` (`USERNAME`))
-
togvau
senior tag
válasz
Lortech #9621 üzenetére
És ez mit jelent hogy rossz az entity db mappingem? Az entitykből lettek generálva a táblák.
Egyébként most megcsináltam fordítva, a meglévő táblákból generáltam az entityket, így kiegészült pár mappedby-al, meg onetomany, meg manytone annotációval, 2 user hozzáadás ment, bár event akkor is "detached entity passed to persist", de aztán már a user hozzáadás is ugyan ez. Most már generálni sem tudok az entitykből táblát, mert az meg más exceptionnel száll el.
Szóval állítom vissza az ezelőtt mentett workspacet... -
togvau
senior tag
Vannak így létrehozott adatbázis táblák, JPA entitykből:
CREATE TABLE Applications (ID INTEGER NOT NULL, AMOUNT FLOAT, APPROVED TINYINT(1) default 0, APPLICANT_USERNAME VARCHAR(255), PRIMARY KEY (ID))
CREATE TABLE Events (DATE DATETIME NOT NULL, EVENT VARCHAR(255), SUCCESS TINYINT(1) default 0, USER_USERNAME VARCHAR(255), PRIMARY KEY (DATE))
CREATE TABLE XUSER (USERNAME VARCHAR(255) NOT NULL, NAME VARCHAR(255), PASSWORD VARCHAR(255), TYPE INTEGER, PRIMARY KEY (USERNAME))
ALTER TABLE Applications ADD CONSTRAINT FK_Applications_APPLICANT_USERNAME FOREIGN KEY (APPLICANT_USERNAME) REFERENCES XUSER (USERNAME)
ALTER TABLE Events ADD CONSTRAINT FK_Events_USER_USERNAME FOREIGN KEY (USER_USERNAME) REFERENCES XUSER (USERNAME)
CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL(38), PRIMARY KEY (SEQ_NAME))
INSERT INTO SEQUENCE(SEQ_NAME, SEQ_COUNT) values ('SEQ_GEN', 0)Xuser létrehozása megy, de eventet már nem lehet, mert:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'user' in 'field list'
Akkor is ezt dobja, ha az eventben lévő user példányt létrehozom, és az megy az event entity-be, de akkor is ugyan az, ha konkrétan a JPA-s lekérdezésből jött user példány van az eventbe irányítva.
Ez mitől van? Hogy lehet a wildfly hibernate-jének a végső SQL parancsait kiirattatni mondjuk a konzolra? Az lehet segítene a hiba keresésben.
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- Vigneau interaktív lokálblogja
- Futás, futópályák
- sziku69: Szólánc.
- Csak semmi szimmetria: flegma dizájnnal készül a Nothing Phone (3)
- Philips LCD és LED TV-k
- Norvégia átmenetileg betiltja az áramigényes kriptobányászatot
- Jogász topic
- Milyen billentyűzetet vegyek?
- További aktív témák...
- ASUS ROG Strix GeForce RTX 4070 Ti OC 12GB GDDR6X 192bit Videokártya
- RX570-es, RX580-as és RX5500XT eladó videó-kártyák - Garancia
- Canon EOS 1300D gép szettek, objektívekkel, kiegészítőkkel (1400 - 7900 expos gépek, újszerűek! )
- Macbook Air M2 8/256 100% akku
- Iphone 14 Pro fehér-ezüst 128GB nagyon szép
- Beszámítás! HP Z2 G4 Tower Workstation számítógép garanciával, hibátlan működéssel
- Xbox Ultimate előfizetések
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5700X 16/32/64GB RAM RX 7600XT 16GB GAMER PC termékbeszámítással
- Bomba ár! Dell Latitude 7390 2in1 - i7-8G I 16GB I 256SSD I 13,3"FHD Touch I HDMI I Cam I W11 I Gar
- LG 65C3 - 65" OLED evo - 4K 120Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - PS5 és Xbox!
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest