wtorek, 28 października 2008

Uzyskanie dostępu do EntityManager z poziomu Java SE

Z JPA możemy korzystać nie tylko na serwerze aplikacyjnym ale także w aplikacjach desktopoych w poczciwym Java SE. Jednak aby tego dokonać nie możemy użyć wstrzykiwania tylko musimy skorzystać z klasy javax.persistence.Persistence aby za pomocą metody createEntityManagerFactory utworzyć obiekt typu EntityManagerFactory. Metoda przyjmuje jeden lub dwa parametry. Pierwszy to String - nazwa jednostki utrwalania z której będziemy korzystać, zdefiniowana musi być ona w pliku persistence.xml. Dodatkowo jeśli chcemy zmodyfikować właściwości jakie w nim zostały ustalone możemy podać obiekt typu Map jako drugi parametr i w zawrzeć ustawienia jakie nam odpowiadają.
EntityManagerFactory umożliwia nam utworzenie potrzebnego nam kontekstu utrwalania EntityManager za pomocą metody createEntityManager().

Po zakończeniu korzystania z EntityManagerFactory dobrze jest zamknąć i zwolnić zasoby poprzez wywołanie metody close().

Ok, no to teraz przykład:
JPATest.java
package com.blogspot.wookasz.jpainj2se;

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

public class JPATest {

public static void main(String[] args) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPAJ2SETestPU");
EntityManager entityManager = factory.createEntityManager();
factory.close();

Person person = new Person(1L, "Zbyszko", "Ul. Nieznana 18");
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
entityManager.persist(person);
transaction.commit();
}
}
Person.java
package com.blogspot.wookasz.jpainj2se;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Person implements Serializable {

@Id
private Long id;

private String name;
private String address;

public Person() {
}

public Person(Long id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

}
persistence.xml



org.hibernate.ejb.HibernatePersistence
com.blogspot.wookasz.jpainj2se.Person








Koniecznie trzeba jeszcze dołączyć Hibernate (lub TopLink ale wtedy trzeba zmodyfikować plik xml) do projektu oraz sterownik odpowiadający używanej bazie danych.

Należy też pamiętać, że jeśli podczas tworzenia EntityManagera aktywna była transakcja to musimy wykonać na nim metoda joinTransaction() aby się do niej przyłączyć, w przeciwnym wypadku dane nie będą synchronizowane z bazą danych.

Brak komentarzy:

Prześlij komentarz