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