自分で書いた汎用簡略化コードの例


Base Serviceクラス:
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.jboss.seam.annotations.In;


public class BaseService implements Serializable {
	private static final long serialVersionUID = 232790306929537427L;

	@In
	EntityManager em;

	protected EntityManager getEntityManager() {
		return em;
	}

	protected <T> void persist(T t) {
		getEntityManager().persist(t);
	}

	protected <T> void update(T t) {
		getEntityManager().merge(t);
	}

	protected <T> void remove(T t) {
		getEntityManager().remove(t);
	}

	@SuppressWarnings("unchecked")
	protected <T> T getEntityById(String namedQuery, String queryKey, int keyId) {
		T t;
		Query q = getEntityManager().createNamedQuery(namedQuery);
		q.setParameter(queryKey, keyId);
		t = (T) q.getSingleResult();

		return t;
	}
	
	@SuppressWarnings("unchecked")
	protected <T> List<T> findResults(String querysql){
		List<T> tl = new ArrayList<T>();
		
		tl = (List<T>)getEntityManager().createQuery(querysql).getResultList();
		
		return tl;
	}
} 

実装クラス:
import java.util.ArrayList;
import java.util.List;
import org.jboss.seam.annotations.Name;

import com.apj.epm.model.Customer;
import com.apj.epm.model.Project;
import com.apj.epm.vo.ProjectVO;

@Name("projectService")
public class ProjectService extends BaseService {
	private static final long serialVersionUID = -4134390648777536330L;

	public List<ProjectVO> findAllProjects(String customerId,
			String projectName, String abbrProjectName) {
		List<ProjectVO> pl = new ArrayList<ProjectVO>();

		String querysql = "";

		if (projectName != null) {
			if (projectName.length() > 0)
				querysql += "AND PROJECT_NAME like '" + projectName + "' ";
		}

		if (abbrProjectName != null) {
			if (abbrProjectName.length() > 0)
				querysql += "AND ABBR_PROJECT_NAME like '" + abbrProjectName
						+ "' ";
		}

		querysql = "select p from Project p where (CUSTOMER_ID = " + customerId + " or 0=" + customerId + ") "
				+ querysql;
		
		List<Project> pml = this.findResults(querysql);

		for (Project p : pml) {
			pl.add(new ProjectVO(p));
		}
		return pl;
	}

	public void Save(ProjectVO p) {
		Project newProject;
		Customer c;

		c = this.getEntityById("Customer.findCustomerById", "customerId", p
				.getCustomer().getCustomerId());

		newProject = new Project(p.getPiNo(), p.getProjectName(), p
				.getAbbrProjectName(), c, p.getProjectType(), p
				.getProjectStatus(), p.getProjectNature(),
				p.getSystemManager(), p.getGroupBy());

		this.persist(newProject);
	}

	public void UpdateProject(ProjectVO p) {
		Project newProject;
		
		newProject =this.getEntityById("Project.findProjectById", "projectId", p.getProjectId());
		
		Customer c;

		c = this.getEntityById("Customer.findCustomerById", "customerId", p
				.getCustomer().getCustomerId());

		newProject.setAbbrProjectName(p.getAbbrProjectName());
		newProject.setCustomer(c);
		newProject.setGroupBy(p.getGroupBy());
		newProject.setPiNo(p.getPiNo());
		newProject.setProjectName(p.getProjectName());
		newProject.setProjectNature(p.getProjectNature());
		newProject.setProjectStatus(p.getProjectStatus());
		newProject.setProjectType(p.getProjectType());
		newProject.setSystemManager(p.getSystemManager());

		this.update(newProject);
	}

	public void RemoveProject(ProjectVO p) {
		Project newProject;
		
		newProject =this.getEntityById("Project.findProjectById", "projectId", p.getProjectId());

		this.remove(newProject);
	}
}