JPA ile Oluşturulan Varlık Sınıfları ve Örneklerle Çalışma Şekilleri

Yazının birinci bölümü niteliği taşıyan JPA ile Oluşturulan Kalıcılık Birimleri ve Örneklerle Çalışma Şekilleri yazısında uygulamaya dayalı kalıcılık birimlerinin marifetlerinden bahsetmiştim. Şimdi de kalıcılık birimi adı altında oluşturulan classı da kullanarak çalışan varlık sınıfını örneklerle açıklamaya çalışacağım.

Netbeans ile postgreSQL bağlantısı kurulumunu anlattığım makalede bu classların oluşturulma aşamalarını anlatmıştım, tekrarlamaya gerek yok. Merak edenler buradan bakabilirler. Varlık sınıfları, yapılan bazı düzenlemelerle derleyici tarafından sizin de kontrolünüzde istediğiniz paketin içine otomatik olarak oluşturulur. Adı da, veritabanındakiTabloAdıJpaController şeklindedir. Bu sınıfı neden oluşturma ihtiyacı duyarız? Sorunun cevabını, buyrun classa bir göz atın, ondan sonra vereyim.

projectInfosJpaController.java classı
[cc lang =’java’]
package actions;

import actions.exceptions.NonexistentEntityException;
import actions.exceptions.PreexistingEntityException;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;

/**
 *
 * @author dell620x
 */
public class ProjectsInfosJpaController
{
    private EntityManagerFactory emf = null;

    public ProjectsInfosJpaController()
    {
        emf = Persistence.createEntityManagerFactory(“projeAdinizPU”); // persistence.xml dosyasında bulunan isim olduğunu kontrol edin
    }
    

    public EntityManager getEntityManager()
    {
        return emf.createEntityManager();
    }

    public void create(ProjectsInfos projectsInfos)
    {
        EntityManager em = null;
        try
        {
            em = getEntityManager();
            em.getTransaction().begin();
            em.persist(projectsInfos);
            em.getTransaction().commit();
        }
        catch (Exception ex)
        {
            if (em != null)
            {
                em.close();
            }
        }        
    }

    public void edit(ProjectsInfos projectsInfos) throws NonexistentEntityException, Exception
    {
        EntityManager em = null;
        try
        {
            em = getEntityManager();
            em.getTransaction().begin();
            projectsInfos = em.merge(projectsInfos);
            em.getTransaction().commit();
        }
        catch (Exception ex)
        {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0)
            {
                Integer id = projectsInfos.getPCode();
                if (findProjectsInfos(id) == null)
                {
                    throw new NonexistentEntityException(“The projectsInfos with id ” + id + ” no longer exists.”);
                }
            }
            throw ex;
        }
        finally
        {
            if (em != null)
            {
                em.close();
            }
        }
    }

    public void destroy(Integer id) throws NonexistentEntityException
    {
        EntityManager em = null;
        try
        {
            em = getEntityManager();
            em.getTransaction().begin();
            ProjectsInfos projectsInfos;
            try
            {
                projectsInfos = em.getReference(ProjectsInfos.class, id);
                projectsInfos.getPCode();
            }
            catch (EntityNotFoundException enfe)
            {
                throw new NonexistentEntityException(“The projectsInfos with id ” + id + ” no longer exists.”, enfe);
            }
            em.remove(projectsInfos);
            em.getTransaction().commit();
        }
        finally
        {
            if (em != null)
            {
                em.close();
            }
        }
    }

    public List<ProjectsInfos> findProjectsInfosEntities()
    {
        return findProjectsInfosEntities(true, -1, -1);
    }

    public List<ProjectsInfos> findProjectsInfosEntities(int maxResults, int firstResult)
    {
        return findProjectsInfosEntities(false, maxResults, firstResult);
    }

    private List<ProjectsInfos> findProjectsInfosEntities(boolean all, int maxResults, int firstResult)
    {
        EntityManager em = getEntityManager();
        try
        {
            Query q = em.createQuery(“select object(o) from ProjectsInfos as o”);
            if (!all)
            {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        }
        finally
        {
            em.close();
        }
    }

    public ProjectsInfos findProjectsInfos(Integer id)
    {
        EntityManager em = getEntityManager();
        try
        {
            return em.find(ProjectsInfos.class, id);
        }
        finally
        {
            em.close();
        }
    }

    public int getProjectsInfosCount()
    {
        EntityManager em = getEntityManager();
        try
        {
            Query q = em.createQuery(“select count(o) from ProjectsInfos as o”);
            return ((Long) q.getSingleResult()).intValue();
        }
        finally
        {
            em.close();
        }
    }

}

[/cc]
 

Temsili veritabanı tablosu; tablo adı: projectInfos

pCode name link
explanation projectCategory
???? ???? ???? ???? ????

Kod bloğunda yine gayet açık olan metodlarla; ekleme, silme ve güncelleme işlemlerini yapabilecek kodlar hazır yazılmış durumda. Yazının başında, “oluşturulan bu sınıf, kalıcılık birimi oluşturulurken otomatik gelen sınıfı da (projectsInfos.java sınıfı. Bir önceki yazıdan hatırlayacaksınız) kullanır” demiştim. Farkettiyseniz metodların aldıkları değişkenler projectsInfos türünde. Bunun anlamı şudur. projectsInfos classındaki tablo değişkenlerine değer atarız, ve projectsInfosJpaController sınıfındaki metodlarla da veritabanına ekleme, silme güncelleme işlemlerini gerçekleştiririz. Örnek olması açısından ana class olarak düşüneceğiniz bir classtan tablo değişkenlerine değer atayalım ve veritabanına bu atadığımız verileri kaydedelim.

 

Uygulama geliştirdiğimiz herhangi bir class
[cc lang =’java’]
package actions;

import javax.persistence.*;
import java.util.*;
import java.io.*;
import java.io.Serializable;
import javax.servlet.http.*;
import javax.servlet.*;
import org.apache.catalina.connector.Request;
import java.applet.Applet;

public class saveValues extends HttpServlet
{
    //@PersistenceUnit
    public String execute()
    {
        //değer ataması yapacağımız kalıcılık birimi sınıfından nesne türetiyoruz
        ProjectsInfos pI=new ProjectsInfos();
        pI.setPCode(1000);
        pI.setName(“projectName”);
        pI.setProjectCategory(2);
        pI.setLink(“projectLink”);
        pI.setExplanation(“statement”);
        
        //Veritabanı işlemlerini yapabileceğimiz varlık sınıfından nesne türetiyoruz
        ProjectsInfosJpaController proInfJPACont = new ProjectsInfosJpaController();
        //Veritabanına veri eklemek için create metodunu kullandık
        proInfJPACont.create(pI);
        return “SUCCESS”;
    }
}
[/cc]
 

Küçük bir varlık sınıfı uygulamasıyla JPA konusunu sanıyorum pekiştirdik. İlerde bu kavramların tümünün kullanıldığı bir web uygulaması yapmayı düşünüyorum. Tüm parçaların bir arada görünebilmesi ve arayüzün de projeye dahil edilmesi bakımından faydalı bir yazı olacaktır. İyi çalışmalar…

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir