18 Ocak 2015 Pazar

JSF PrimeFaces Hibernate dataTable with Joins


     JSF öğrenmeye başladığımdan beri en çok takıldığım noktalardan birisi de birkaç tablodan ortak veri çekip bu verileri dataTable(PrimeFaces)  içerisinde göstermek ve üzerinde işlemler yapmak oldu. Belki de bu problemi aşmak çok kolaydı ve ben amatör olduğum için aşamamış olabilirim. Yine de kayda değer bir konu olduğunu düşündüğüm için burada bu konudan bahsedeceğim.

     Elimizde "user" ve  "blog" adında iki tablomuz var ve aşağıda bunlar bu tablolara denk gelen POJO lardır.. User da kullanıcı bilgileri , blog da ise kullanıcının yazdığı yazıların bilgileri var. Ben de aşağıda olduğu gibi sorgu ile iki tablodaki verileri çekiyorum. Buradaki benim asıl sıkıntım dönen sorgudaki veriler ile pojom tam eşleşmediği için hata alıyordum. Yani blog = q.list() dediğimde veriler aslında pojoya yerleştirilemiyor. Çözüm olarak aşağıdaki gibi önce iterator içerisine sonra object dizisine son olarakta pojoma yerleştiriyorum. Böylece bu problemi halletmiş oluyoruz.

     Daha sonra dataTable üzerinde her türlü işlemi sorunsuz yapabiliyoruz. Bunun haricinde daha kolay bir yöntemi de olabilir. Ancak ben bilmiyorum. Eğer siz biliyorsanız beni de bilgilendirirseniz sevinirim!



public List blogGetir(int id) {
        List blog = new ArrayList<>();
        Blog blg = new Blog();
        ses = hu.getSessionFactory().openSession();
        ses.beginTransaction();
        Query q = ses.createQuery("from Blog b join b.user where b.user.uid=:uid")
                .setParameter("uid", id);
        Iterator iter = q.list().iterator();
        Object[] obje;
        while (iter.hasNext()) {
            obje = (Object[]) iter.next();
            blg = (Blog) obje[0];
            blog.add(blg);
        }

        ses.getTransaction().commit();
        ses.close();
        return blog;
    }
Aşağıda bu yöntemi kullanmadan tek tablodan veri çekmiştim , isterseniz izleyip bu bahsettiğim olayın kısmen uygulanışını görebilirsiniz.

0 yorum:

Yorum Gönder