Konteynır tarafından yönetilen ve Uygulama Tarafından yönetilen olmak üzere 2 tür Entity Manager vardır.
Konteynır Tarafından Yönetilen EntityManager:
Konteynır EntityManager’ı enterprise bileşenlere enjekte eder.
Konteynır EntityManagerFactory’den EntityManagerı oluşturur.
@PersistenceContext
EntityManager entityManager;
Konteynır transactionların başlatılmasından commit edilmesinden ya da roll back yapılmasından sorumludur.
Uygulama Tarafından Yönetilen EntityManager
EntityManager yaşam döngüsü uygulama tarfından yönetilir.
Uygulamada EntityManager oluşturulur .
Önce EntityManagerFactory oluşturulur.
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(“persistenceunitadı”);// persistence.xml’de tanımlıdır.
Sonra EntityManager oluşturulur.
EntityManager entityManager=entityManagerFactory.createEntityManager();
Entityleri Persit Etmek (Veritabanına )
public static EntityManager getEntityManager() {
return entityManagerFactory.createEntityManager();
}
public void saveStudent() {
EntityManager em = getEntityManager();
em.getTransaction().begin();
Student student = newStudent();
student.setId(1L);
student.setName(“Ali”);
student.setClass(“3A”);
em.persist(student);
em.getTransaction().commit();
}
Entityleri Yüklemek (okumak)
Veritabanından nesneyi okumak için find metodu kullanılır.
public Student getMovie(Long studentId) {
EntityManager em = getEntityManager();
Student student = em.find(Student.class, new Long(studentId));
em.detach(student);
return student;
}
Eğer entity’e sadece referans vermek istiyorsak getReference() metdou kullanılır. Entity’e bir proxy nesnesi döndürülür.
However, if we just need the reference to the entity, we can use the getReference() method instead. In effect, it returns a proxy to the entity:
Student studentRef = em.getReference(Student.class, new Long(studentId));
Entityleri Sökme (Detach)
Entityleri persistence context’ten detach etmek istediğimizde
em.detach(student);
Entity persistence context’ten sökülürse statüsü sökülmüş(detached) olur.
Entityleri Birleştirme (merge)
Farklı transactionlarda entity değişikliği gerektiğinde merge metodu kullanılır.
Entity sorgulandı. söküldü (detach) sonra farklı transactionda değişiklik yapılırsa birleştirilir.(merge )
public void mergeMovie() {
EntityManager em = getEntityManager();
Student student = getStudent(1L);
em.detach(student);
student.setName(“Osman”);
em.getTransaction().begin();
em.merge(student);
em.getTransaction().commit();
}
Entity Sorgulama
JPQL kullanılarak sorgulama yapılabilir.
getResultList liste halinde sonuç döner. getSingleResult() 1 adet sonuç döner.
public List<?> queryForStudents() {
EntityManager em = getEntityManager();
List<?> students = em.createQuery(“SELECT s from Students student where Student.class = ?1”)
.setParameter(1, “4th”)
.getResultList();
return movies;
}
Entity Silme
remove metdou ile veri,tabanındaki bir entity silinebilir.
Nesne veritabanından silinmiştir detach olmamıştır.
public void removeStudent() {
EntityManager em = HibernateOperations.getEntityManager();
em.getTransaction().begin();
Student student = em.find(Student.class, new Long(1L));
em.remove(student);
em.getTransaction().commit();
}