Jpa generic dao for google app engine
Here the codes to create Jpa Generic Dao for Google App engine.
Create EMF(Entity Manager factory) class
cackage com.beda.pushurl.server;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public final class EMF {
private static final EntityManagerFactory emfInstance =
Persistence.createEntityManagerFactory("transactions-optional");
private EMF() {}
public static EntityManagerFactory get() {
return emfInstance;
}
}
Create interface Dao
package com.beda.pushurl.server.dao;
import java.io.Serializable;
import java.util.List;
public interface Dao {
public void Save(T object);
public void Delete(T object);
public List GetAll();
public T Get(ID id);
public List GetByQueryString(String queryString);
}
Create implementation class for Dao
package com.beda.pushurl.server.dao;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import javax.jdo.annotations.Transactional;
import javax.persistence.EntityManager;
import org.springframework.orm.jpa.JpaTemplate;
import com.beda.pushurl.server.EMF;
public abstract class DaoImpl implements Dao {
protected EntityManager entityManager;
JpaTemplate jpaTemplate;
DaoImpl()
{
this.entityManager= EMF.get().createEntityManager();
jpaTemplate= new JpaTemplate(entityManager);
}
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
jpaTemplate= new JpaTemplate( entityManager);
}
Class persistanceClass;
public void Delete(T object) {
jpaTemplate.remove(object);
}
public List GetAll() {
return entityManager.createQuery("SELECT FROM " + getPersistanceClass().getName()).getResultList();
}
@Transactional
public void Save(T object) {
object=entityManager.merge(object);
entityManager.persist(object);
}
public List GetByQueryString(String queryString) {
return entityManager.createQuery(queryString).getResultList();
}
public T Get(ID id) {
return jpaTemplate.find(getPersistanceClass(), id);
}
private Class getPersistanceClass()
{
if (persistanceClass == null)
persistanceClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
return persistanceClass;
}
}
Create domain class(Persistance class in GWT terms)
package com.beda.pushurl.server.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import com.google.appengine.api.datastore.Key;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
private String userName;
private String password;
private String displayName;
public User() {
}
public Key getKey() {
return key;
}
public String getUserName() {
return userName;
}
public void setUserName(String name) {
this.userName = name;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public String getDisplayName() {
return displayName;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
}
Create interface UserDao
package com.beda.pushurl.server.dao;
import com.beda.pushurl.server.domain.User;
public interface UserDAO extends Dao {
}
Implement UserDAO
package com.beda.pushurl.server.dao;
import com.beda.pushurl.server.domain.User;
public class UserDAOImpl extends DaoImpl implements UserDAO {
}
blog comments powered by Disqus