Komentáře k článku

Java na webovém serveru: hlasování a grafy v SVG

Jak jsme si minule slíbili, dnes zase pokročíme trochu s funkcionalitou naší aplikace. Dnešním cílem bude umožnit uživatelům hlasovat, zda se v jejich oblíbeném podniku má kouřit nebo ne. Zavedeme jednoduchou ochranu proti podvodnému hlasování. Výsledky vykreslíme pomocí pěkného SVG grafu. Využijeme přitom to, co jsme se naučili v minulých dílech – zejména tvorbu REST API a vytváření vlastních JSP značek. V datové vrstvě si ukážeme, že i při používání ORM (JPA/Hibernate) máme stále k dispozici staré dobré SQL.

Zpět na článek

5 komentářů k článku Java na webovém serveru: hlasování a grafy v SVG:

  1. František KučeraAutor příspěvku

    Hlasování

    Upravil jsem SELECT tak, že je možné hlasovat z jedné IP adresy každý den.

    BTW: jak řešíte tenhle problém vy? Používáte k identifikaci hlasujících uživatelů IP adresy nebo něco jiného? Dovolujete hlasovat víckrát nebo jen jednou, případně jednou za určitý časový úsek?

    1. JK

      Re: Hlasování

      Pouziti IP mi neprijde vhodne, hlavne kvuli natu. Osvedcila se mi captcha v kombinaci z cookie – kdyz se uzivatel snazi, tak zahlasuje nekolikrat, ale vyhnu se tisucum hlasu pripadneho bota co by zkousel free proxy…

      1. František KučeraAutor příspěvku

        Re: Hlasování

        Ale to je hodně uživatelsky nepřívětivé – obávám se, že v takovém případě se většina lidí na hlasování vykašle.

  2. xylon

    dalsia inspiracia

    chcel by som poprosit autora ci by vedel spravit clanok na pracu s aplikacnou logikou. Bud ejb alebo spring. Velmi by sa nieco take hodilo :).

  3. Tom Oli

    JPA native query

    Dobrý den, v poslední části článku se používá native query např. takto:
    Query q = em.createNati­veQuery(NATIVE_SQL);
    Trochu jsem si stím hrál a narazil jsem na problém, který se mi nepodařilo vyřešit (resp. nikde jsem nenalezl odpověď).
    Představte si, že chci z tabulky hlasovani vypsat všechny ip_adresa.
    Vytvořím select : SELECT ip_adresa as ip from hlasovani
    potom si nechám vrátit list
    List<Object[]> result = q.getResultList();
    problém nastáva, když chci vypysovat jednotlivé adresy
    for (Object[] row : result) {
    if(row[0] instanceof Character){
    Sysout…(„to snad neni mozne“);bohuzel realita
    }
    }
    – objekty, které jsou uloženy v řádcích (row) jsou typu Character, nikoli jak jsem předpokládal String. Zjednodušeně řečeno se do nich uloží jen první znak ip_adresy. Přetypování samozřejmě nefunguje.
    V Hibernatu se tento problém řeší poměrně jednoduše:
    SQLQuery q = hibernateSessi­on.createSQLQu­ery(NATIVE_SQL);
    q.addScalar( „ip“, Hibernate.STRIN­G);
    nastaví se typ výsledku
    a v listu je pak doopravdy objekt typu String. V JPA jsem tuto možnost nenašel. Pokud se scalar v Hibernatu nenastaví, opět defaultně vrací Character.
    Možná se to může zdát jako blbost a někdo bude namítat, proč si rovnou nenechám vrátit entitu hlasovani, nebo proč to nevyřeším v JPQL, ale pokud dělám složitější selecty, kde chci využít databázových funkcí a vybírám data např. z 5 tabulek a potřebuju je pohromadě vypsat, tak je JPQL dost neefektivní oproti native (query). (dále to nebudu rozpitvávat)
    Konkrétní problém mám v Hiberntate 3.4 – 3.5 JPA impl a DB Oracle 10g s tabulkovými atributy typu CHAR a VARCHAR.
    Pokud znáte nějaké jednoduché řešení dejte prosím vědět, jinak velice pěkný článek.

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=3224