Monday 1 April 2013

IS2 - HQL Query and Criteria - Examples


HQL Query and Criteria - Examples


HQL doc. - dokumentacija

two examples - dva primjera

Criterium doc. - kriterijumi dokumentacija

Criteria - kriterija


Vrati zaduzene Primjerke

Session sesija = HibernateUtil.getSessionFactory().getCurrentSession();
            sesija.beginTransaction();
       
            List<Primerak> lista = new ArrayList<Primerak>();
            Query upit = sesija.createQuery("select p from Primerak as p join p.knjiga as k join p.zaduzenjes as z"
            + " where z.datumVracanja is null");
            lista = upit.list();
            sesija.getTransaction().commit();

List<Knjiga> getKnjigeForZaduzenjeKategorija(Date od, Date doK, Kategorija kat)

Session sesija = HibernateUtil.getSessionFactory().getCurrentSession();
            sesija.beginTransaction();
       
            List<Knjiga> lista = new ArrayList<Knjiga>();
           
            Query upit = sesija.createQuery("select k from Knjiga as k " +
                    "join k.primeraks as p join p.zaduzenjes as z where z.clan.kategorija = :kat " +
                    "and z.datumZaduzenja >= :od and z.datumZaduzenja <= :doK");
            upit.setParameter("kat", kat);
            upit.setParameter("od", od);
            upit.setParameter("doK", doK);
            lista = upit.list();
            sesija.getTransaction().commit();

List<Knjiga> findKnjigeby (String izdavac, String godinaIzdanja)

Session sesija = HibernateUtil.getSessionFactory().getCurrentSession();
            sesija.beginTransaction();
            List<Knjiga> lista = new ArrayList<Knjiga>();
            Criteria crit = sesija.createCriteria(Knjiga.class);
            if (izdavac != null){
                crit.add(Restrictions.like("izdavac", izdavac).ignoreCase());
            }
            if (godinaIzdanja != null){
                crit.add(Restrictions.like("godinaIzdanja", godinaIzdanja).ignoreCase());
            }
            lista = crit.list();
            sesija.getTransaction().commit();



List<Clan> getPrezaduzeniClanovi(int maxZaduzenje)

Session sesija = HibernateUtil.getSessionFactory().getCurrentSession();
            sesija.beginTransaction();
       
            List<Clan> lista = new ArrayList<Clan>();
            Query upit = sesija.createQuery("select c from Clan c join c.zaduzenjes as z " +
                    "where z.datumVracanja is null " +
                    "group by c having count(z) > :maxZ");
           
            upit.setInteger("maxZ", maxZaduzenje);
            lista = upit.list();
            sesija.getTransaction().commit();

List<Zaduzenje> getNerazduzenaZaClanskiBroj(int clanskiBroj)

Session sesija = HibernateUtil.getSessionFactory().getCurrentSession();
            sesija.beginTransaction();
       
            List<Zaduzenje> lista = new ArrayList<Zaduzenje>();
            Query upit = sesija.createQuery("from Zaduzenje z where z.datumVracanja is null and " +
             "z.clan.clanskiBroj = :clbroj");
            upit.setParameter("clbroj", clanskiBroj);
            lista = upit.list();
            sesija.getTransaction().commit();


         * TODO Zadatak 3 (10 poena)
         * Implementirati operaciju koja vraca sve knjige
         * koje su u periodu @param datumOd do @param datumDo
         * zaduzivane vise od @param minBrZaduzenja puta

       
        public List<Knjiga> getKnjigeBrojZaduzenja(Date datumOd, Date datumDo, int minBrZaduzenja){           
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            Query q = session.createQuery("select k from Knjiga k join k.primeraks p join p.zaduzenjes z " +
                    "where z.datumZaduzenja > :datumOd and z.datumZaduzenja < :datumDo group by k having count(z)>:minBr");
           
            q.setDate("datumOd", datumOd);
            q.setDate("datumDo", datumDo);
            q.setInteger("minBr", minBrZaduzenja);
            List<Knjiga> knjige = q.list();      
            session.getTransaction().commit();
            return knjige;
        }

*TODO Zadatak 1 (5 poena)
     * Implementirati operaciju koja pronalazi clana sa zadatim clanskim brojem
     * i zaduzuje ga za primerak @param p
     * Operacija treba da vrati true ako je clan zaduzen,
     * odnosno false ako nije

   
    public boolean zaduziClana(int clanskiBroj, Primerak p){
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Clan c = (Clan) session.get(Clan.class, clanskiBroj);
        session.getTransaction().commit();       
        if(c==null || !isSlobodanPrimerak(p.getInvBroj())) return false;
        session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Zaduzenje z = new Zaduzenje();
        z.setId(446);
        z.setClan(c);
        z.setPrimerak(p);
        z.setDatumZaduzenja(new Date());
        session.save(z);   
        session.getTransaction().commit();  
        return true;
    }
   

     * TODO Zadatak 2 (5 poena)
     * @param invBroj
     * @return


    public boolean isSlobodanPrimerak(String invBroj){
           Session session = HibernateUtil.getSessionFactory().getCurrentSession();
           session.beginTransaction();
           Query q = session.createQuery("from Zaduzenje z where z.primerak.invBroj like :invBroj and z.datumVracanja is null");
           q.setString("invBroj",invBroj);
           if(q.list().isEmpty()){
               session.getTransaction().commit();
               return true; 
           }else{
               session.getTransaction().commit();
               return false;
           }          
       }


     * Vraca sve clanove cije prezime je jednako  @param prezime
     * i koji su rodeni u periodu @param datumOd @param datumDo
     * @return

   
    public List<Clan> getClanoviPrezimeRodjenje(String prezime, Date datumOd, Date datumDo){
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Criteria criteria = session.createCriteria(Clan.class);
        criteria.add(Restrictions.like("prezime", prezime));
        criteria.add(Restrictions.between("datumRodjenja", datumOd, datumDo));
       
        List<Clan> clanovi = criteria.list();
        session.getTransaction().commit();
        return clanovi;       
    }
   

     * Vraca clanove koji imaju nerazduzenih zaduzenja
     * pre @param datumDo
     * @return


      public List<Clan> getZaduzeniClanovi(Date datumDo){
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Query query = session.createQuery("select c from Clan c join c.zaduzenjes z where " +
                "z.datumZaduzenja< :datumDo and z.datumVracanja is null");
        query.setDate("datumDo", datumDo);
        List<Clan> clanovi = query.list();       
        session.getTransaction().commit();   
        return clanovi;
    }
   

     * TODO Zadatak 2 (10 poena)
     * Implementirati operaciju koja vraca sve clanove kategorije
     * @param kat koji su u periodu @param datumOd do @param datumDo
     * imali vise od  @param minBrZaduzenja zaduzenja

   
    public List<Clan> getClanoviBrojZaduzenja(Kategorija kat, Date datumOd, Date datumDo, int minBrZaduzenja){      
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Query query = session.createQuery("select c from Clan c join c.zaduzenjes z where c.kategorija = :kat " +
                "and z.datumZaduzenja> :d1 and z.datumZaduzenja < :d2 group by c having count(z) > :min ");
        query.setEntity("kat", kat);
        query.setDate("d1", datumOd);
        query.setDate("d2", datumDo);
        query.setInteger("min", minBrZaduzenja);
        List<Clan> result = query.list();       
        return result;
    }


* TODO Zadatak 1 (10 poena)
     * Implementirati operaciju koja pronalazi primerak sa inventarnim brojem
     * @param invBroj
     * i zaduzuje ga za clana @param c
     * pri tome treba voditi racuna
     * da primerak ne moze biti dva puta zaduzen i
     * da clan ne moze imati vise od tri nerazduzena zaduzenja
     * Operacija treba da vrati true ako je clan zaduzen,
     * odnosno false ako nije

   
    public boolean zaduziClana(String invBroj, Clan c){       
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Primerak p = (Primerak)session.get(Primerak.class, invBroj);
        if(p==null){
            session.getTransaction().commit();
            return false;
        }
        Query queryZaduzenjaPrimerak = session.createQuery(
                        "select z from Zaduzenje z where z.primerak = :primerak and z.datumVracanja is null");
        queryZaduzenjaPrimerak.setEntity("primerak", p);       
        Query queryZaduzenjaClan = session.createQuery(
                        "select z from Zaduzenje z where z.clan = :clan and z.datumVracanja is null");
        queryZaduzenjaClan.setEntity("clan", c);       
        if((queryZaduzenjaPrimerak.list().size() > 0) || (queryZaduzenjaClan.list().size() > 3)){
            session.getTransaction().commit();
            return false;
        }       
        else{           
            Zaduzenje zaduzenje = new Zaduzenje();
            zaduzenje.setId(9990);
            zaduzenje.setPrimerak(p);
            zaduzenje.setClan(c);
            zaduzenje.setDatumZaduzenja(new Date());           
            session.saveOrUpdate(zaduzenje);
            session.getTransaction().commit();
            return true;
        }   
    }


      * TODO 2. (12 poena) Implementirati operaciju
* koja vraca sve clanove koji su knjigu sa istim autorom i naslovom
* zaduzili vise od @param brZaduzenja puta

public static List<Clan> getClanoviForBrojZaduzenja(int brZaduzenja){
try{
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Query query = session.createQuery("select c from Clan c join c.zaduzenjes z " +
                                                                        "group by c,z.primerak.knjiga.naslov,z.primerak.knjiga.autor having count(z) > :min ");
        query.setInteger("min", brZaduzenja);
        List<Clan> result = query.list();
        return result;
}catch(Exception e){
        return null;
}
}

* TODO 1. (8 poena) Koriscenjem upita prema kriterijumu
* implementirati operaciju koja vraca sve knjige koje imaju
* primerke i ciji naslov sadrzi podstring @param naslov deo
* Rezultujuce knjige sortirati po naslovu

public static List<Knjiga> getKnjigeZaDeoNaslova(String naslovDeo){
try{
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Criteria crit = session.createCriteria(Knjiga.class);
        crit.add(Restrictions.like("naslov", naslovDeo, MatchMode.ANYWHERE));
        crit.add(Restrictions.sizeGt("primeraks", 0));
        List<Knjiga> knjigas = crit.list();
        session.getTransaction().commit();
        return knjigas;
}catch(Exception e){
        return null;
}
}


List<Primerak> list = getZaduzeniPrimerci();
        for (Primerak p:list){
            System.out.println(p.getInvBroj() + " " + p.getKnjiga().getNaslov());
        }



        <set name="primeraks" table="PRIMERAK" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="ID_KNJIGE" />
            </key>
            <one-to-many class="rs.ac.uns.dmi.is2.dbmodel.Primerak" />
        </set>




<many-to-one name="knjiga" class="rs.ac.uns.dmi.is2.dbmodel.Knjiga" fetch="select" lazy="false">
            <column name="ID_KNJIGE" />
        </many-to-one> 



PARSIRANJE DATUMA 


 static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    static Date date = new Date();
    static Date datumod;
    static Date datumdo;



try{
            datumod = sdf.parse("2013-03-03");
            datumdo = sdf.parse("2013-03-12");
        }catch(Exception e){
            e.printStackTrace();
        }




public static int updateClan(int clanskiBroj, String ime, String prezime, String adresa, Kategorija kategorija, Date datum1){

try{
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();

Clan c = new Clan();
c.setClanskiBroj(clanskiBroj);
c.setIme(ime);
c.setPrezime(prezime);
c.setAdresa(adresa);
c.setDatumRodjenja(datum1);
c.setDatumUpisa(date);
c.setKategorija(kategorija);
c.setZaduzenjes(null);
session.save(c);
session.getTransaction().commit();
return clanskiBroj;
} catch(Exception e) {
e.printStackTrace();
return 0;
}
}



public static int createAndStoreClan(String ime, String prezime, String adresa, Kategorija kategorija, Date datum1){

try{
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();

Clan c = new Clan();
c.setIme(ime);
c.setPrezime(prezime);
c.setAdresa(adresa);
c.setDatumRodjenja(datum1);
c.setDatumUpisa(date);
c.setKategorija(kategorija);
c.setZaduzenjes(null);
Integer clanskiBroj = (Integer) session.save(c);
session.getTransaction().commit();
return clanskiBroj;
} catch(Exception e) {
e.printStackTrace();
return 0;
}
}

KOLOKVIJUM ODRZAN 04.02.2013 GRUPA 1
Resenje prvog zadatka ne radi ako budete pokusavali da pokrenete u eclipse-u jer se to sada radi na drugi nacin ali je profesorica prihvatila jer nam to ona nije pokazala kako treba ustvari, greska je boldirana i podvucena.


     * TODO 1. (8 poena) Koriscenjem upita prema kriterijumu implementirati
     * operaciju koja vraca sva razduzena zaduzenja za koje vazi barem jedan od
     * dva uslova: - zaduzenje se odnosi na knjige koja u naslovu sadrze @param
     * naslovDeo - zaduzenje je izvrseno u periodu @param datumOd - @param
     * datumDo


    public static List<Zaduzenje> getZaduzenjaZaNaslov(String naslovDeo,
            Date datumOd, Date datumDo) {

        try {
            Session session = HibernateUtil.getSessionFactory()
                    .getCurrentSession();
            session.beginTransaction();

            List<Zaduzenje> lista = new ArrayList<Zaduzenje>();

            Criteria crit = session.createCriteria(Zaduzenje.class);

            Criterion lhs = Restrictions.like("primerak.knjiga.naslov",
                    naslovDeo, MatchMode.ANYWHERE);



            Criterion rhs = Restrictions.between("datumZaduzenja", datumOd,
                    datumDo);

            crit.add(Restrictions.isNotNull("datumVracanja"));
            crit.add(Restrictions.or(lhs, rhs));
           
           
            lista = crit.list();

            if (lista.isEmpty()) {
                System.out.println("Rezultat upita je prazan!");
                return null;
            }

            session.getTransaction().commit();
            return lista;
        } catch (Exception e) {
            System.out.println("Doslo je do greske!");
            e.printStackTrace();
            return null;
        }

    }

     * TODO 2. (12 poena) Implementirati operaciju koja vraca sve primerke koji
     * su istog dana bili greskom zaduzeni vise puta


    public static List<Primerak> pronadjiGreskomZaduzene() {

        try {
            Session session = HibernateUtil.getSessionFactory()
                    .getCurrentSession();
            session.beginTransaction();

            List<Primerak> result = new ArrayList<Primerak>();

            Query query = session
                    .createQuery("select p from Primerak p join p.zaduzenjes z where z.datumVracanja is null"
                            + " or (z.datumZaduzenja != z.datumVracanja)"
                            + " group by p, z.datumZaduzenja, z.datumVracanja having count(z) > 1");
           
           
            result = query.list();

            if (result.isEmpty()) {
                System.out.println("Rezultat upita je prazan!");
                return null;
            }

            return result;

        } catch (Exception e) {
            System.out.println("Doslo je do greske!");
            e.printStackTrace();
            return null;
        }

    }

Kolokvijum odrzan 05.04.2013 god, zadaci su bez resenja to je za vjezbu ukoliko ko bude isao na porpavni ako ko ima resenja neka postavi u komentaru dole...



* TODO 2. (14 poena)

* Implementirati operaciju
* koja zaduzuje clana sa clanskim brojem @param clanskiBroj
* za vise primeraka datih u listi @param invBrojevi pri tom izvrsiti sledece provere:
*
* - clan kategorije student moze zaduziti maksimalno 5 primeraka
* - clanovi ostalih kategorija mogu da zaduze najvise 3 primerka
* - da bi se primerak zaduzio on mora biti slobodan
*
* Ukoliko su ispunjeni uslovi, zaduzenja sacuvati u bazi i vratiti izgenerisane primarne kljuceve


public static List<Integer> zaduzi(int clanskiBroj, List<Integer> invBrojevi){ return null; }


* TODO 1. (6 poena)

* Koriscenjem upita prema kriterijumu
* implementirati operaciju koja vraca sve knjige
* za koje vazi barem jedan od dva uslova:
* - izdavac im se nalazi u listi @param izdavaci
* - naslov ne sadrzi string @param naslovDeo


public static List<Knjiga> getKnjigeZaIzdavace(List<String> izdavaci, String naslovDeo){ return null; }


50 comments:

  1. TODO 1. (8 poena) Koriscenjem upita prema kriterijumu napraviti operaciju koja vraca sve
    * knjige cija je godina izdanja jednaka @param godina, izdavac nije u skupu @param izdavaci i
    * prezime autora je @param prezimeAutora
    *
    *
    */




    public List getKnjige(String godina, String[] izdavaci, String prezimeAutora){
    try{
    Session s = HibernateUtil.getSessionFactory().getCurrentSession();
    s.beginTransaction();

    Criteria criteria = s.createCriteria(Knjiga.class);
    criteria.add(Restrictions.like("godinaIzdanja",godina));
    criteria.add(Restrictions.not(Restrictions.in("izdavac", izdavaci)));
    criteria.add(Restrictions.like("prezimeAutora", prezimeAutora, MatchMode.ANYWHERE ));
    List knjige = criteria.list();
    s.getTransaction().commit();
    return knjige;
    }
    catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    }

    ReplyDelete
  2. bas je lepo ovde.

    ReplyDelete
  3. TODO 1. (8 poena) Koriscenjem upita prema kriterijumu
    * implementirati operaciju koja vraca sve
    * knjige ciji naslov pocinje sa
    * @param pocetakNaslova ili je izdavac jednak sa @param izdavacKnjige,
    * i ciji je broj primeraka veci ili jednak sa @param brPrimeraka
    * (sortirati rezultate rastuce prema imenu autora knjige)
    */

    ReplyDelete
  4. * TODO 2. (12 poena) Implementirati operaciju
    * koja vraca sve clanove koji nisu zaduzili ni jednu knjigu
    * sa naslovom iz skupa
    * @param imenaKnjiga i upisani su posle datuma @param datum
    */

    ReplyDelete
  5. /**
    *
    * TODO 1. (8 poena) Koriscenjem upita prema kriterijumu
    * implementirati operaciju koja vraca sve
    * knjige ciji naslov pocinje sa
    * @param pocetakNaslova ili je izdavac jednak sa @param izdavacKnjige,
    * i ciji je broj primeraka veci ili jednak sa @param brPrimeraka
    * (sortirati rezultate rastuce prema imenu autora knjige)
    */


    public static List getKnjige(String pocetakNaslova, String izdavacKnjige, int brPrimeraka){
    try{
    Session s=HibernateUtil.getSessionFactory().getCurrentSession();
    s.beginTransaction();

    Criteria crit=s.createCriteria(Knjiga.class);
    Criterion lhs;
    Criterion rhs;
    crit.add(Restrictions.or(Restrictions.like("naslov", pocetakNaslova, MatchMode.START), Restrictions.like("izdavac", izdavacKnjige)));
    crit.add(Restrictions.sizeGt("primeraks", brPrimeraka));
    crit.addOrder(Order.asc("autor"));
    List rezultat=crit.list();

    s.getTransaction().commit();
    return rezultat;
    }
    catch(Exception e){
    e.printStackTrace();
    return null;
    }
    }

    ReplyDelete
  6. public static List getKnjige(String pocetakNaslova, String izdavacKnjige, int brPrimeraka){
    List knjige = new ArrayList<>();
    try{
    Session s = HibernateUtil.getSessionFactory().getCurrentSession();
    s.beginTransaction();
    Criteria crit=s.createCriteria(Knjiga.class);
    crit.add(Restrictions.or(Restrictions.like("naslov",pocetakNaslova+"%"), Restrictions.like("izdavac", izdavacKnjige)));
    crit.add(Restrictions.sizeGe("primeraks", brPrimeraka));

    knjige=crit.list();
    s.getTransaction().commit();
    return knjige;
    }catch(Exception e){
    e.printStackTrace();
    }
    return null;
    }

    ReplyDelete
  7. List rezultat = new ArrayList<>();
    rezultat = getKnjige("Pesme", "Prosveta", 12);
    for (Knjiga k : rezultat)
    System.out.println(k.getNaslov() + " " + k.getAutor());
    }

    ReplyDelete
  8. package rs.ac.uns.dmi.is2.managers;

    import java.text.ParseException;

    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;



    import org.hibernate.Query;
    import org.hibernate.Session;

    import rs.ac.uns.dmi.is2.dbmodel.Clan;
    import rs.ac.uns.dmi.is2.dbmodel.Kategorija;
    import rs.ac.uns.dmi.is2.dbmodel.Knjiga;
    import rs.ac.uns.dmi.is2.managers.HibernateUtil;

    public class ClanManager3 {

    public static Integer createAndSaveClan (String ime, String prezime, String adresa, Date datumRodjenja,
    Date datumUpisa, Integer idKategorije) {
    try{
    Session s = HibernateUtil.getSessionFactory().getCurrentSession();
    s.beginTransaction();
    Clan clan = new Clan();
    clan.setIme(ime);
    clan.setPrezime(prezime);
    clan.setAdresa(adresa);
    clan.setDatumRodjenja(datumRodjenja);
    clan.setDatumUpisa(datumUpisa);
    clan.setKategorija((Kategorija) s.load(Kategorija.class, idKategorije));
    Integer id = (Integer) s.save(clan);
    s.getTransaction().commit();
    return id;
    }
    catch (Exception e) {
    e.printStackTrace();
    return null;
    }

    }

    public static Integer updateClan (Integer idClan, String ime, String prezime, String adresa, Date datumRodjenja,
    Date datumUpisa, Integer idKategorije) {
    try{
    Session s = HibernateUtil.getSessionFactory().getCurrentSession();
    s.beginTransaction();
    Clan clan = new Clan();
    clan.setClanskiBroj(idClan);
    clan.setIme(ime);
    clan.setPrezime(prezime);
    clan.setAdresa(adresa);
    clan.setDatumRodjenja(datumRodjenja);
    clan.setDatumUpisa(datumUpisa);
    clan.setKategorija((Kategorija) s.load(Kategorija.class, idKategorije));
    s.update(clan);
    s.getTransaction().commit();
    return idClan;
    }
    catch (Exception e){
    e.printStackTrace();
    return null;
    }
    }


    /*
    * Izlistavanje clanova, koji su se uclanili u biblioteku iymedju dva prosledjena datuma,
    * i koji pored toga pripadaju kategoriji, ciji je identifikator prosledjen
    */
    public static List getClanoviZaDatumUclanjenjaKategorija(Date datumOd, Date datumDo, Integer idKategorije){
    try{
    Session s = HibernateUtil.getSessionFactory().getCurrentSession();
    s.beginTransaction();
    Query query = s.createQuery("from Clan c where c.datumUpisa between :datumOd and :datumDo " +
    "and c.kategorija.idkategorije = :idKat");
    query.setDate("datumOd", datumOd);
    query.setDate("datumDo", datumDo);
    query.setInteger("idKat", idKategorije);
    List clans = query.list();
    s.getTransaction().commit();
    return clans;
    }catch(Exception e){
    e.printStackTrace();
    return null;
    }
    }


    /**
    * TODO 2. (12 poena) Implementirati operaciju
    * koja vraca sve clanove koji nisu zaduzili ni jednu knjigu
    * sa naslovom iz skupa
    * @param imenaKnjiga i upisani su posle datuma @param datum
    */

    public static List getClanoviBezZaduzenjaZaNaslovKnjige(String[] imenaKnjiga, Date datum)
    {
    try
    {
    Session s = HibernateUtil.getSessionFactory().getCurrentSession();
    s.beginTransaction();
    Query query = s.createQuery("from Clan c join fetch c.zaduzenjes z where c.datumUpisa >= :datum AND " +
    "z.primerak.knjiga.naslov not in :imenaKnjiga");
    query.setDate("datum", datum);
    query.setParameterList("imenaKnjiga", (String[])imenaKnjiga);
    List clans = (List)query.list();
    s.getTransaction().commit();
    return clans;
    }
    catch(Exception e)
    {
    e.printStackTrace();
    return null;
    }
    }



    public static void main(String[] args) throws ParseException
    {
    String[] str = {"Besnilo", "Informacioni sistemi2","Odjeci", "Pesme"};
    SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD");
    Date dat = sdf.parse("1988-01-01");
    List clans = getClanoviBezZaduzenjaZaNaslovKnjige(str, dat);
    for(Clan c : clans)
    System.out.println(c.getIme());
    }

    }

    ReplyDelete
  9. /**
    * TODO 2. (12 poena) Implementirati operaciju koja vraca sve clanove koji
    * su se upisali u biblioteku u periodu @param datumOd - @param datumDo i
    * zaduzili su knjigu koja u naslovu sadrzi
    *
    * @param deoNaslova
    *
    */
    public static List getClanoviZaduzenje(Date datumOd, Date datumDo,
    String deoNaslova) {
    List clanovi = new ArrayList<>();
    try {
    Session session = HibernateUtil.getSessionFactory()
    .getCurrentSession();
    session.beginTransaction();
    Query query = session
    .createQuery("select distinct c from Clan c join c.zaduzenjes z where c.datumUpisa between :datOd and :datDo AND z.primerak.knjiga.naslov like :daoNaslova");
    query.setDate("datOd", datumOd);
    query.setDate("datDo", datumDo);
    query.setString("deoNaslova", "%" + deoNaslova + "%");
    clanovi = query.list();
    session.getTransaction().commit();
    return clanovi;
    } catch (Exception e) {
    return null;
    }
    }

    public static void main(String[] args) {
    List rezultat = new ArrayList<>();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    try {
    rezultat = getClanoviZaduzenje(sdf.parse("2000-01-01"),
    sdf.parse("2014-12-12"), "Muzicka apo");
    } catch (Exception e) {
    e.printStackTrace();
    }
    for (Clan c : rezultat)
    System.out.println(c.getClanskiBroj());
    }

    }

    ReplyDelete
  10. /** (tastatura)
    * TODO 2. (12 poena) Implementirati operaciju koja vraca knjige,
    * koje nisu zaduzili clanovi iz kategorije @param kat
    *
    *
    */
    public static List getKnjige(Kategorija kategorija){
    return null;
    }

    ReplyDelete
  11. //skoro pa dobro resenje, slobodno me ispravite

    public static List getKnjige(Kategorija kategorija){
    try{
    Session s = HibernateUtil.getSessionFactory().getCurrentSession();
    s.beginTransaction();
    Query query = s.createQuery("from Knjiga k join k.primeraks p join p.zaduzenjes z where" +
    "z.datumVracanja is null and z.clan.kategorija not in :kat");
    query.setParameter("kat", kategorija);
    List rezultati = query.list();
    return rezultati;

    }catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    return null;
    }

    }

    ReplyDelete
  12. public static List getKnjige(Kategorija kategorija)
    {
    List rez=new List<>();
    try {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    Query query = session.createQuery("select distinct k from Knjiga k where k not in(select distinct k from Knjiga k join k.primeraks p join p.zaduzenjes z where z.clan.kategorija=:kategorija)");
    query.setObject("kategorija",kategorija);
    rez = query.list();
    session.getTransaction().commit();
    } catch (Exception e) {
    e.printStackTrase();
    }
    return rez;
    }
    sintaksa nije 100% dobro, radio sam u notepad++, ako ima greska onda verovatno samo stampana greska, pogledaj sta bi modlu da bude, pa ispravi

    ReplyDelete
  13. public static List*Knjiga* getKnjige(Kategorija kategorija)
    {
    List*Knjiga* rez=new List**();
    try {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    Query query = session.createQuery("select distinct k from Knjiga k where k not in(select distinct k from Knjiga k join k.primeraks p join p.zaduzenjes z where z.clan.kategorija=:kategorija)");
    query.setObject("kategorija",kategorija);
    rez = query.list();
    session.getTransaction().commit();
    } catch (Exception e) {
    e.printStackTrase();
    }
    return rez;
    }
    pojeo je sve sto je bio izmenju znakove manje i vece, * trebas da promenis za odgovarajuci znak

    ReplyDelete
  14. // main metod

    Kategorija kat = new Kategorija();
    List resenje = new ArrayList<>();
    knjige = getKnjige(kat);
    for(Knjiga k: knjige){
    System.out.println(k.getNaslov());

    ReplyDelete
  15. // main metod

    Kategorija kat = new Kategorija();
    List resenje = new ArrayList<>();
    knjige = getKnjige(kat);
    for(Knjiga k: knjige){
    System.out.println(k.getNaslov());

    ReplyDelete
  16. /**
    * (tastatura)
    * TODO 1. (8 poena) Koriscenjem upita prema kriterijumu implementirati operaciju koja vraca sve
    * clanove koji su zaduzili primerak sa inventarnim brojem @param invBroj i upisani su posle datuma @param datum
    *
    *
    */

    ReplyDelete
  17. public static List getClanoviZaduzenjaPrimerka(Integer invBroj, Date datum){
    try{
    Session s = HibernateUtil.getSessionFactory().getCurrentSession();
    s.beginTransaction();

    Criteria crit=s.createCriteria(Clan.class);
    crit.add(Restrictions.ge("datumUpisa", datum));
    crit.setFetchMode("zaduzenjes", FetchMode.EAGER).setFetchMode("primerak", FetchMode.EAGER).add(Restrictions.eq("invBroj", invBroj));


    List rezultat=crit.list();
    s.getTransaction().commit();
    return rezultat;
    }catch(Exception e){
    e.printStackTrace();
    return null;
    }
    }

    nisam siguran da li je dobro

    ReplyDelete
  18. mislim da je dobro

    ReplyDelete
  19. TODO 2. (12 poena) Implementirati operaciju koja vraca sve primerke i naslov knjige,
    * koje su godine @param godZaduzenja zaduzili clanovi upisani jednog od datuma iz kolekcije @param datumiUpisa
    *

    ReplyDelete
  20. TODO 1. (8 poena) Koriscenjem upita prema kriterijumu implementirati operaciju koja vraca sve
    * clanove kategorije sa id-om @param idKategorije kojima je ukupan broj zaduzenja izmedju @param minZaduzenja i @param maxZaduzenja
    *

    ReplyDelete
  21. public static List getKategorijaForId(Integer kategorijaidint) {
    // TODO Auto-generated method stub
    try{
    Session s = HibernateUtil.getSessionFactory().getCurrentSession();
    s.beginTransaction();
    Query query = s.createQuery("from Kategorija k where k.idkategorija = :idParam ");
    query.setInteger("idParam", kategorijaidint);
    List rez = query.list();
    s.getTransaction().commit();
    return rez;
    }catch(Exception e){
    return null;

    }
    }

    ReplyDelete
  22. import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;

    import javax.persistence.EntityManager;
    import javax.persistence.Query;
    import javax.persistence.TypedQuery;

    import model.Clan;
    import model.Kategorija;
    import model.Zaduzenje;

    public class ClanManager {
    public Integer saveClan(String ime, String prezime, String adresa,
    Date datumRodjenja, Date datumUpisa, Integer idKategorije) {
    try {
    EntityManager entityManager = JPAUtil.getEntityManager();
    entityManager.getTransaction().begin();

    Clan clan = new Clan();
    clan.setIme(ime);
    clan.setPrezime(prezime);
    clan.setAdresa(adresa);
    clan.setDatumRodjenja(datumRodjenja);
    clan.setDatumUpisa(datumUpisa);
    clan.setKategorija(entityManager.find(Kategorija.class,
    idKategorije));
    entityManager.persist(clan);
    entityManager.getTransaction().commit();
    entityManager.close();
    return clan.getClanskiBroj();
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    }

    /*
    * Selektovati sva zaduženja za člana sa datim članskim brojem
    */

    public List getZaduzenjaClana(Integer idClana){
    EntityManager entityManager = JPAUtil.getEntityManager();

    Query tq=entityManager.createQuery("SELECT c.zaduzenjes FROM Clan c WHERE c.clanskiBroj = :idCl");
    tq.setParameter("idCl", idClana);
    List zaduzenja=(List)tq.getResultList();

    entityManager.close();

    return zaduzenja;
    }

    /*
    * Selektovati članove koji imaju nerazdužena zaduženja, ovo je sa join-om
    */

    public List getNerazduzeniClanovi(){
    EntityManager entityManager = JPAUtil.getEntityManager();

    TypedQuery tq=entityManager.createQuery("SELECT c FROM Clan c join fetch c.zaduzenjes z WHERE z.datumVracanja is null", Clan.class);
    List clanovi=(List)tq.getResultList();

    entityManager.close();

    return clanovi;
    }

    /*
    * Selektovati članove koji su učlanjeni u biblioteku u periodu datumOd
    datumDo i zadužili su primerak sa inventarnim brojem invBroj
    */

    public List getClanoviUclanejniUPerioduSaZaduzenjem(Date odDatum, Date doDatum, Integer invBroj){
    EntityManager entityManager = JPAUtil.getEntityManager();

    //TypedQuery tq=entityManager.createQuery("SELECT c FROM Clan c join c.zaduzenjes z WHERE"
    // + " c.datumUpisa > :datumOd and c.datumUpisa < :datumDo and z.primerak.invBroj like :invBr", Clan.class);

    TypedQuery tq=entityManager.createQuery("SELECT c FROM Clan c join c.zaduzenjes z WHERE"
    + " c.datumUpisa between :datumOd and :datumDo and z.primerak.invBroj like :invBr", Clan.class);

    tq.setParameter("datumOd", odDatum);
    tq.setParameter("datumDo", doDatum);
    tq.setParameter("invBr", invBroj);
    List clanovi=(List)tq.getResultList();

    entityManager.close();

    return clanovi;

    }

    public static void main(String[] args) throws ParseException{
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    Date datumRodjenja=sdf.parse("1990-01-12");
    ClanManager cm=new ClanManager();
    System.out.println("Sacuvano: "+cm.saveClan("Pera", "Kojot", "Diznilend", datumRodjenja, new Date(), 1));

    List zad=cm.getZaduzenjaClana(34);
    System.out.println("Get zaduzenja clana:");
    for(Zaduzenje z:zad){
    System.out.println(z.getId());
    }
    System.out.println("Get nerazduzeni clanovi:");
    List clanovi=cm.getNerazduzeniClanovi();
    for(Clan c:clanovi){
    System.out.println(c.getClanskiBroj());
    List zaduzenja=c.getZaduzenjes();
    System.out.println("Zaduzenja su");
    for(Zaduzenje z:zaduzenja){
    System.out.println(z.getId());
    }
    }

    ReplyDelete
    Replies
    1. System.out.println("Cetvrti upit:");
      SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
      Date d1=sdf1.parse("2015-03-12");
      Date d2=sdf1.parse("2015-03-15");
      List cl=cm.getClanoviUclanejniUPerioduSaZaduzenjem(d1, d2, 3);
      for(Clan c:cl){
      System.out.println(c.getClanskiBroj());
      }
      }
      }

      Delete
  23. package managers;

    import java.util.ArrayList;
    import java.util.List;

    import javax.persistence.EntityManager;
    import javax.persistence.TypedQuery;

    import model.Knjiga;
    import model.Primerak;

    public class KnjigaManager {

    public Boolean saveKnjiga(String naslov, String autor, String godIzdanja,
    String izdavac) {
    try {
    EntityManager entityManager=JPAUtil.getEntityManager();

    entityManager.getTransaction().begin();
    Knjiga k = new Knjiga();
    k.setNaslov(naslov);
    k.setAutor(autor);
    k.setGodinaIzdanja(godIzdanja);
    k.setIzdavac(izdavac);
    entityManager.persist(k);

    entityManager.getTransaction().commit();
    entityManager.close();
    return true;
    } catch (Exception e) {
    e.printStackTrace();
    return false;
    }
    }

    public List addPrimeraks(Knjiga k, int brPrimeraka){
    try{
    EntityManager entityManager=JPAUtil.getEntityManager();
    entityManager.getTransaction().begin();

    ArrayList idS=new ArrayList();
    for(int i=0;i getKnjigeZaDeoNaslova(String deoNaslova){
    EntityManager entityManager = JPAUtil.getEntityManager();

    TypedQuery tq=entityManager.createQuery("SELECT k FROM Knjiga k WHERE k.naslov LIKE :substring", Knjiga.class);
    tq.setParameter("substring", '%'+deoNaslova+'%');
    List knjige=tq.getResultList();
    entityManager.close();
    return knjige;
    }

    public static void main(String[] args){
    EntityManager em=JPAUtil.getEntityManager();
    Knjiga k=em.find(Knjiga.class, 1);
    KnjigaManager km=new KnjigaManager();
    km.saveKnjiga("Rani Jadi", "Danilo Kis", "2000", "Prometej");
    List idPr=km.addPrimeraks(k, 5);
    System.out.println("Id-ovi primeraka");
    for(Integer id:idPr){
    System.out.println(id);
    }

    List knjige=km.getKnjigeZaDeoNaslova("Rat");
    for(Knjiga knj:knjige){
    System.out.println(knj.getNaslov()+" "+knj.getIdKnjige());
    }
    }
    }

    ReplyDelete
  24. /**
    * brisanje nekoliko n-torki
    * @param em - EntityManager
    * @param lista - Lista Clanova
    * @return
    */
    public boolean deleteClanovi(EntityManager em, List lista) {
    try {
    em.getTransaction().begin();
    for (Clan c : lista) {
    em.remove(c);
    }
    em.getTransaction().commit();
    em.close();
    } catch (Exception e) {
    e.printStackTrace();
    return false;
    }
    return true;
    }

    /**
    * brisanje jedne n-torke
    * @param em - EntityManager
    * @param c - Clan
    * @return
    */
    public boolean deleteClan(EntityManager em, Clan c) {
    try {
    em.getTransaction().begin();
    em.remove(c);
    em.getTransaction().commit();
    em.close();
    } catch (Exception e) {
    e.printStackTrace();
    return false;
    }
    return true;
    }

    //
    /**
    * update jedne n-torke
    * @param em - EntityManager
    * @param id - Clanski broj clana
    * @return
    */
    public boolean updateClan(EntityManager em, int id) {
    try {
    em.getTransaction().begin();
    Clan c = em.find(Clan.class, id);
    c.setIme("novo ime kao primer");
    em.merge(c);
    em.getTransaction().commit();
    em.close();
    } catch (Exception e) {
    e.printStackTrace();
    return false;
    }
    return true;
    }

    /**
    * ukoliko imamo listu n-torki koje menjamo onda to izgleda ovako
    * @param em - EntityManager
    * @param lista - Lista clanova
    * @return
    */
    public boolean updateClanovi(EntityManager em, List lista) {
    try {
    em.getTransaction().begin();
    for (Clan c : lista) {
    c.setIme("novo ime");
    em.merge(c);
    }
    em.getTransaction().commit();
    em.close();
    } catch (Exception e) {
    e.printStackTrace();
    return false;
    }
    return true;
    }

    ReplyDelete
    Replies
    1. public static void main(String[] args) {
      ClanManager cm = new ClanManager();
      EntityManager em = JPAUtil.getEntityManager();
      List lista = cm.getNerazduzeniClanovi(em);
      cm.deleteClanovi(em, lista);
      }

      Delete
    2. merge() - update
      persist() - insert
      remove() - delete
      NAPOMENA : da bi kaskadno uradili brisanje potrebno je dodati sledeci atribut u anotaciju: cascade={CascadeType.ALL} .
      Npr.
      @OneToMany(mappedBy="clan", fetch=FetchType.LAZY, cascade={CascadeType.ALL})
      private List zaduzenjes;

      to nam kaze da ce obrisati i Zaduzenje u kome je javlja Clan kojeg brisemo.

      Delete
  25. Ajoj Trile aj stavi ovde metod tvoj prvi :D

    ReplyDelete
  26. MECIII TRILEEE

    ReplyDelete
  27. List getZaduziliNaUpisu(){
    try{
    EntityManager em=JPAUtil.getEntityManager();
    Query q=em.createQuery("SELECT c FROM Clan c join c.zaduzenjes z WHERE z.datumZaduzenja LIKE c.datumUpisa");
    List rez=(List)q.getResultList();
    em.close();
    return rez;
    }catch(Exception e){
    e.printStackTrace();
    return null;
    }

    }

    ReplyDelete
  28. Bravo Macko, ajde sad I drugi ako uradis :D

    ReplyDelete
  29. imeklase atk=new imeklase();
    List zad=atk.getZaduziliNaUpisu();
    for(Clan z:zad){
    System.out.println(z.getIme());
    }

    ReplyDelete
  30. sipaj miliiii

    ReplyDelete
  31. Ajde drugi metod Trile mozes ti tooo :D

    ReplyDelete
  32. List rezultat= new KolokvijumManager().getZaduziliNaUpisu();
    for(Clan c:rezultat)
    System.out.println(c.getIme());
    }

    ReplyDelete
  33. public int getBrojUpisanihClanovaZaPeriod(Date datumOd, Date datumDo)
    {
    EntityManager em = JPAUtil.getEntityManager();
    TypedQuery q = em.createQuery("SELECT COUNT(c) FROM Clan c WHERE c.datumUpisa BETWEEN :dO AND :dD", Long.class);
    q.setParameter("dO", datumOd);
    q.setParameter("dD", datumDo);
    Long l = q.getSingleResult();
    int br = l.intValue();
    return br;
    }

    public List kreirajKategorijuIDodeliRodjenima(String nazivKategorije, Date datumOd, Date datumDo)
    {
    EntityManager em = JPAUtil.getEntityManager();
    em.getTransaction().begin();
    TypedQuery q = em.createQuery("SELECT c FROM Clan c WHERE c.datumRodjenja BETWEEN :dO AND :dD", Clan.class);
    q.setParameter("dO", datumOd);
    q.setParameter("dD", datumDo);
    List lista = q.getResultList();
    Kategorija k = new Kategorija();
    k.setNazivkategorije(nazivKategorije);
    for (Clan c : lista)
    {
    c = k.addClan(c);
    }
    em.persist(k);
    em.getTransaction().commit();
    em.close();
    return lista;
    }

    ReplyDelete
  34. This comment has been removed by the author.

    ReplyDelete
  35. =B86/(1/(1+B89*B87)+3/2/(1+B89*B88)) ako je odnos 2:3 At = AT/1+rt MENICA
    =B56/(1/(1+B60*B57)+1,2/(1+B60*B58)+1,44/(1+B60*B59)) ako je svaka sledeca veca za 20%
    =(B82-4000/(1+B85*B84))/(1/(1+B85*B83)+1/(1+B85*B84)) kada je prva umanjena za 4000

    ReplyDelete
  36. re=(1-ra/m)^m-1 rk=(1-ra/m)^1/s-1 FV=r,n,-R

    A(T)=A(0)(1-ra/m)^(sb/db+n+sa/da) kombinacija p i s
    =B33*(1+ra/m)^(n+sa/da) komforna ks

    =PMT(E40;E37;-E36) R

    ReplyDelete
  37. Djo= Z , Ij = Dj*r , Bj= Rj-Ij , RJ= R= PMT

    ReplyDelete
  38. --------------------------------------
    - CLAN MANAGER JAVA -
    --------------------------------------

    public class ClanManager {
    public Clan saveClan(String ime, String prezime, String adresa, Date datumRodjenja, Date datumUpisa,
    int kat) {
    try {
    EntityManager em = JPAUtil.getEntityManager();
    em.getTransaction().begin();
    Clan c = new Clan();
    c.setIme(ime);
    c.setPrezime(prezime);
    c.setAdresa(adresa);
    c.setDatumRodjenja(datumRodjenja);
    c.setDatumUpisa(datumUpisa);
    c.setKategorija(em.find(Kategorija.class, kat));
    em.persist(c);
    em.getTransaction().commit();
    return c;
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    }

    public List getClanoviZaDatumUpisaKategorija(Date datumUpisa, int kat){
    EntityManager em = JPAUtil.getEntityManager();
    TypedQuery query = em.createQuery("select c from Clan c where c.datumUpisa = :datumUpisa "
    + "and c.kategorija = :kat", Clan.class);
    query.setParameter("datumUpisa", datumUpisa);
    query.setParameter("kat", em.find(Kategorija.class, kat));
    List rez = query.getResultList();
    em.close();
    return rez;
    }

    public List getSveKategorije(){
    EntityManager em=JPAUtil.getEntityManager();
    Query q=em.createQuery("from Kategorija k");
    List kategorije=q.getResultList();
    em.close();
    return kategorije;
    }
    public List getNerazduzenaZaduzenjaZaClana(Integer clanskiBroj) {
    EntityManager em=JPAUtil.getEntityManager();
    Clan c=em.find(Clan.class, clanskiBroj);
    Query q=em.createQuery("from Zaduzenje z where z.clan=:c and z.datumVracanja is null");
    q.setParameter("c", c);
    List zaduzenja=q.getResultList();
    em.close();
    return zaduzenja;
    }

    public boolean razduzi(int idZaduzenja){
    EntityManager em=JPAUtil.getEntityManager();
    try{
    em.getTransaction().begin();
    Zaduzenje z = em.find(Zaduzenje.class, idZaduzenja);
    z.setDatumVracanja(new Date());
    em.persist(z);
    em.getTransaction().commit();
    return true;
    }catch(Exception e){
    e.printStackTrace();
    return false;
    }
    }

    public List getClanoviZaImePrezime(String ime, String prezime) {
    EntityManager em=JPAUtil.getEntityManager();
    Query q=em.createQuery("select distinct c from Clan c join fetch c.zaduzenjes z where c.ime like :ime and c.prezime like :prz and z.datumVracanja is null");
    q.setParameter("ime", "%"+ime+"%");
    q.setParameter("prz", "%"+prezime+"%");
    List clanovi=q.getResultList();
    em.close();
    return clanovi;
    }

    public static void main(String[] args){
    ClanManager cm=new ClanManager();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    // Date datumRodjenja;
    try {
    // datumRodjenja = sdf.parse("1982-05-13");
    // Clan c=cm.saveClan("Petar", "Petrovic", "Bulevar Cara Lazara 3, Novi Sad",datumRodjenja, new Date(),1);
    // if(c!=null)
    // System.out.println("Clan je uspesno sacuvan, clanski broj je "+c.getClanskibroj());

    List clanovi=cm.getClanoviZaDatumUpisaKategorija(sdf.parse("2017-02-20"), 2);
    for(Clan cl:clanovi)
    System.out.println(cl.getIme()+" "+cl.getPrezime());
    } catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }

    ReplyDelete
  39. public Knjiga updateKnjiga (int id, String izdavac){
    try{
    EntityManager em=JPAUtil.getEntityManager();
    Knjiga k = em.find(Knjiga.class, id);

    em.getTransaction().begin();
    k.setIzdavac(izdavac);
    em.getTransaction().commit();
    return k;
    }
    catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    }

    public List addPrimeraks(Knjiga k, int brojPrimeraka){
    try{
    EntityManager em = JPAUtil.getEntityManager();
    List retVal = new ArrayList();
    em.getTransaction().begin();
    for(int i=0;i getZaduzeniClanovi(){
    EntityManager em = JPAUtil.getEntityManager();
    TypedQuery q = em.createQuery("select c from Clan c join fetch c.zaduzenjes z "
    + "where z.datumVracanja is null", Clan.class);
    List clanovi = q.getResultList();
    em.close();
    return clanovi;
    }

    public List getNezaduzeniClanovi(){
    EntityManager em = JPAUtil.getEntityManager();
    TypedQuery clanovi = em.createQuery("select distinct c from Clan c where not exists"
    + " (select z from Zaduzenje z where z.datumVracanja is null and z.clan=c)", Clan.class);
    List retVal = clanovi.getResultList();
    em.close();
    return retVal;

    }

    public List getClanoviZadatumUpisaKategorija(Date datumUpisa, Kategorija kat){
    EntityManager em = JPAUtil.getEntityManager();
    TypedQuery query = em.createQuery("select c from Clan c where c.datumUpisa = :datumUpisa "
    + "and c.kategorija = :kat", Clan.class);
    query.setParameter("datumUpisa", datumUpisa);
    query.setParameter("kat", kat);
    List rez = query.getResultList();
    em.close();
    return rez;
    }

    /*
    * vraca sve clanove koji pripadaju nekoj od kategorija datih u listi kategorije
    */


    public List getClanoviZaKategorije(List kategorije){
    EntityManager em = JPAUtil.getEntityManager();
    TypedQuery query = em.createQuery("select c from Clan c where c.kategorija in :katlist", Clan.class);
    query.setParameter("katlist", kategorije);
    List rez = query.getResultList();
    em.close();
    return rez;

    }


    public Clan getClanINerazduzena(Integer clanskiBroj){
    EntityManager em = JPAUtil.getEntityManager();
    TypedQuery q = em.createQuery("select c from Clan c join fetch c.zaduzenjes z "
    + "where z.datumVracanja is null and c.clanskiBroj = :clanskiBroj", Clan.class);
    q.setParameter("clanskiBroj", clanskiBroj);
    Clan c = q.getSingleResult();
    em.close();
    return c;
    }

    public Zaduzenje saveZaduzenje(int clBr, int invBr){
    try{
    EntityManager em=JPAUtil.getEntityManager();
    Clan c=em.find(Clan.class, clBr);
    Primerak p=em.find(Primerak.class, invBr);
    Zaduzenje z=new Zaduzenje();
    z.setClan(c);
    z.setPrimerak(p);
    z.setDatumZaduzenja(new Date());
    em.getTransaction().begin();
    em.persist(z);
    em.getTransaction().commit();
    em.close();
    return z;
    }
    catch(Exception e){
    e.printStackTrace();
    return null;
    }
    }
    public List getSvaZaduzenjaClana(int clBr){
    try{
    EntityManager em=JPAUtil.getEntityManager();
    Clan c=em.find(Clan.class, clBr);
    Query q=em.createQuery("select z from Zaduzenje z where z.clan= :c");
    q.setParameter("c", c);
    List zad=q.getResultList();
    return zad;
    }
    catch(Exception e){
    e.printStackTrace();
    return null;
    }
    }

    public Knjiga pronadjiKnjiguZaPrimerak(int invBr){
    try{
    EntityManager em=JPAUtil.getEntityManager();
    Primerak p=em.find(Primerak.class, invBr);
    return p.getKnjiga();
    }
    catch(Exception e){
    e.printStackTrace();
    return null;
    }
    }

    ReplyDelete
  40. -------------------------------
    - Dodavanje Primeraka Servlet -
    -------------------------------

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Knjiga knjiga = (Knjiga)request.getSession().getAttribute("knjiga");
    String brojPrimeraka = request.getParameter("brojPrimeraka");
    int brojPrimerakaInt = Integer.parseInt(brojPrimeraka);
    List invBrojevi = new KnjigaManager()
    .addPrimeraks(knjiga, brojPrimerakaInt);
    request.setAttribute("snimanjePrimeraka", true);
    request.setAttribute("invBrojevi", invBrojevi);
    RequestDispatcher rd = request.getServletContext().getRequestDispatcher("/unos/UnosPrimeraka.jsp");
    rd.forward(request, response);
    }


    ------------------------
    - Razduzivanje Servlet -
    ------------------------

    Integer clanskiBroj=Integer.parseInt(request.getParameter("clanskiBroj"));
    List zaduzenjaClana=new ClanManager().getNerazduzenaZaduzenjaZaClana(clanskiBroj);
    request.setAttribute("zaduzenja",zaduzenjaClana);
    request.getSession().setAttribute("clanskiBroj", clanskiBroj);
    RequestDispatcher rd=request.getServletContext().getRequestDispatcher("/unos/Razduzenje.jsp");
    rd.forward(request, response);
    }

    /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Integer idZaduzenja=Integer.parseInt(request.getParameter("zaduzenje"));
    boolean razduzen=new ClanManager().razduzi(idZaduzenja);
    String poruka="Clan je uspesno razduzen!";
    if(!razduzen)
    poruka="Doslo je do greske. Clan nije razduzen.";
    Integer clanskiBroj=(Integer)request.getSession().getAttribute("clanskiBroj");
    List zaduzenja=new ClanManager().getNerazduzenaZaduzenjaZaClana(clanskiBroj);
    request.setAttribute("zaduzenja", zaduzenja);
    request.setAttribute("poruka", poruka);
    RequestDispatcher rd=request.getServletContext().getRequestDispatcher("/unos/Razduzenje.jsp");
    rd.forward(request, response);
    }


    ---------------------
    - Save Clan Servlet -
    ---------------------

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try{
    String ime=request.getParameter("ime");
    String prezime=request.getParameter("prezime");
    String adresa=request.getParameter("adresa");
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    Date datumRodjenja=sdf.parse(request.getParameter("datumRodjenja"));
    Date datumUpisa=sdf.parse(request.getParameter("datumUpisa"));
    int idKategorije=Integer.parseInt(request.getParameter("kategorija"));
    ClanManager cm=new ClanManager();
    Clan c=cm.saveClan(ime, prezime, adresa, datumRodjenja, datumUpisa, idKategorije);
    String poruka="";
    if(c!=null)
    poruka="Clan je uspesno sacuvan. Clanski broj je "+c.getClanskibroj();
    else
    poruka="Doslo je do greske. Clan nije sacuvan";
    request.setAttribute("poruka", poruka);
    RequestDispatcher rd=request.getServletContext().getRequestDispatcher("/unos/SaveClan.jsp");
    rd.forward(request, response);
    }
    catch(Exception e){
    e.printStackTrace();
    }
    }

    ReplyDelete
  41. public class SaveKnjiga extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
    * @see HttpServlet#HttpServlet()
    */
    public SaveKnjiga() {
    super();
    // TODO Auto-generated constructor stub
    }

    /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String naslov = request.getParameter("naslov");
    String autor = request.getParameter("autor");
    String godinaIzdanja = request.getParameter("godinaIzdanja");
    String izdavac = request.getParameter("izdavac");
    KnjigaManager km=new KnjigaManager();
    Knjiga k=km.saveKnjiga(autor, naslov, izdavac, godinaIzdanja);
    ServletConfig c=this.getServletConfig();
    String adresa;
    // if(k!=null)
    // adresa = c.getInitParameter("successAddress");
    // else
    // adresa = getServletContext().getInitParameter("errorAddress");
    // RequestDispatcher rd = request.getServletContext().getRequestDispatcher(adresa);//("/unos/SaveKnjiga.jsp");
    String poruka;
    if(k!=null)
    poruka = "Knjiga je uspesno sacuvana!";
    else
    poruka = "Doslo je do greske, knjiga nije sacuvana!";
    request.setAttribute("poruka", poruka);
    request.getSession().setAttribute("knjiga", k);
    RequestDispatcher rd = request.getServletContext().getRequestDispatcher("/unos/UnosPrimeraka.jsp");
    rd.forward(request, response);
    }

    }

    ReplyDelete
  42. SAVE ZADUZENJE

    public class SaveZaduzenje extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
    * @see HttpServlet#HttpServlet()
    */
    public SaveZaduzenje() {
    super();
    // TODO Auto-generated constructor stub
    }

    /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    int clBr=Integer.parseInt(request.getParameter("clanskiBroj"));
    int invBr=Integer.parseInt(request.getParameter("inventarniBroj"));
    KnjigaManager km=new KnjigaManager();
    Zaduzenje z=km.saveZaduzenje(clBr, invBr);
    String poruka;
    if(z!=null)
    poruka="Zaduzenje je uspesno sacuvano!";
    else
    poruka="Doslo je do greske";
    request.setAttribute("poruka", poruka);
    List zaduzenja=km.getSvaZaduzenjaClana(clBr);
    request.getSession().setAttribute("zaduzenja", zaduzenja);
    EntityManager em=JPAUtil.getEntityManager();
    request.setAttribute("clan", em.find(Clan.class, clBr));
    Knjiga k=km.pronadjiKnjiguZaPrimerak(invBr);
    request.setAttribute("knjiga", k);
    RequestDispatcher rd = request.getServletContext().getRequestDispatcher("/prikaz/PrikazZaduzenja.jsp");
    rd.forward(request, response);

    }

    }

    ReplyDelete
  43. VRATI CLANOVE SERVLET

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String ime=request.getParameter("ime");
    String prezime=request.getParameter("prezime");
    List clanovi=new ClanManager().getClanoviZaImePrezime(ime, prezime);
    request.getSession().setAttribute("clanovi", clanovi);
    RequestDispatcher rd=request.getServletContext().getRequestDispatcher("/prikaz/PrikazClanova.jsp");
    rd.forward(request, response);

    }

    /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
    }

    ReplyDelete
  44. VRATI ZADUZENJA CLANA SERVLET

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Integer clanskiBroj=Integer.parseInt(request.getParameter("clanskiBroj"));
    List clanovi=(List)request.getSession().getAttribute("clanovi");
    for(Clan c:clanovi){
    if(c.getClanskibroj()==clanskiBroj)
    request.setAttribute("zaduzenja", c.getZaduzenjes());
    }
    RequestDispatcher rd=request.getServletContext().getRequestDispatcher("/prikaz/PrikazZaduzenjaClana.jsp");
    rd.forward(request, response);


    }

    /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
    }

    ReplyDelete
  45. package managers;

    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;

    public class JPAUtil {

    private static EntityManagerFactory entityMangerFactory;

    static{
    entityMangerFactory = Persistence.createEntityManagerFactory("libraryJPA");
    }

    public static EntityManager getEntityManager(){
    return entityMangerFactory.createEntityManager();
    }

    }

    ReplyDelete