roaddefectdaohibernate.java
来自「Java的框架」· Java 代码 · 共 376 行
JAVA
376 行
package mcaps.apps.prrm.roaddefect.dao.hibernate;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.hibernate.criterion.Restrictions;
import org.hibernate.exception.DataException;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.dao.DataRetrievalFailureException;
//import org.springframework.orm.hibernate.SessionFactoryUtils;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import mcap.core.logging.Log;
import mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO;
import mcaps.apps.prrm.roaddefect.model.RoadDefect;
import mcaps.apps.prrm.roaddefect.model.RoadDefectStatus;
import mcaps.apps.prrm.util.TableNameConstants;
/**
* This is an implementation of RoadDefectDAO using Hibernate. It interacts with
* Spring's HibernateTemplate to save/delete and retrieve RoadDefect objects.
*
* @author jov
* @date Jan 4, 2006
* @version 1.0.1.0
*/
public class RoadDefectDAOHibernate extends HibernateDaoSupport implements RoadDefectDAO{
private final static String className="mcaps.apps.prrm.roaddefect.dao.hibernate.";
/* (non-Javadoc)
* @see mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO#getRoadDefect(java.lang.Integer)
*/
public RoadDefect getRoadDefect(Integer roadDefectID){
HibernateTemplate template = getHibernateTemplate ();
RoadDefect roadDefect = (RoadDefect) template.get (RoadDefect.class, roadDefectID);
if (roadDefect == null) {
Log.warn ("Road Defect with specified identifier [" +
roadDefectID + "] not found.");
throw new DataRetrievalFailureException ("Road Defect with specified identifier [" +
roadDefectID + "] not found.");
}
return roadDefect;
}
/* (non-Javadoc)
* @see mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO#getRoadDefects(mcaps.apps.prrm.roaddefect.model.RoadDefect)
*/
public List getRoadDefects (RoadDefect roadDefect) {
int cnt = 0;
if (roadDefect == null) return getAllRoadDefects();
Criteria c = this.getSession().createCriteria(RoadDefect.class);
String defectDetail = roadDefect.getDefectDetail();
if (defectDetail != null){
if (defectDetail.trim().length() > 0){
c.add(Restrictions.like("defectDetail", "%" + defectDetail + "%"));
cnt++;
}
}
String location = roadDefect.getLocation();
if (location != null){
if (location.trim().length() > 0){
c.add(Restrictions.like("location", "%" + location + "%"));
cnt++;
}
}
String defectType = roadDefect.getDefectType();
if (defectType != null){
if (defectType.trim().length() > 0){
c.add(Restrictions.eq("defectType", defectType));
cnt++;
}
}
String severity = roadDefect.getSeverity();
if (severity != null){
if (severity.trim().length() > 0){
c.add(Restrictions.eq("severity", severity));
cnt++;
}
}
String status = roadDefect.getStatus();
if (status != null){
if (status.trim().length() > 0){
c.add(Restrictions.eq("status", status));
cnt++;
}
}
//Return empty list else all records will be returned if
//no restriction is applied.
if (cnt > 0){
return c.list();
}
return new ArrayList();
}
/* (non-Javadoc)
* @see mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO#getAllRoadDefects()
*/
public List getAllRoadDefects () {
return getHibernateTemplate ().find ("from RoadDefect");
}
/* (non-Javadoc)
* @see mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO#saveRoadDefect(mcaps.apps.prrm.roaddefect.model.RoadDefect)
*/
public void saveRoadDefect (RoadDefect roadDefect) {
Log.info(className + " saveRoadDefect() before saveOrUpdate");
getHibernateTemplate ().saveOrUpdate (roadDefect);
Log.info(className + " saveRoadDefect() after saveOrUpdate");
getHibernateTemplate ().flush ();
Log.info(className + " saveRoadDefect() after flush");
}
/* (non-Javadoc)
* @see mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO#removeRoadDefect(java.lang.Integer)
*/
public void removeRoadDefect (RoadDefect roadDefect) {
getHibernateTemplate ().delete (roadDefect);
}
/* (non-Javadoc)
* @see mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO#getRoadDefectsByContactID(java.lang.Integer)
*/
public List getRoadDefectsByContactID (Integer contactID) {
Criteria c = this.getSession().createCriteria(RoadDefect.class);
c.add(Restrictions.eq("contactID", contactID));
return c.list();
}
public int purgeRoadDefect (Date startDate, Date endDate) {
int count;
List list = this.getClosedRoadDefects(startDate, endDate);
count = list.size();
HibernateTemplate template = getHibernateTemplate ();
Session sess=template.getSessionFactory().openSession();
try {
Connection con=sess.connection() ;
Statement stat;
stat=con.createStatement();
String criteria=null;
int i=0;
Iterator iter=list.iterator();
while(iter.hasNext())
{
RoadDefect roadDefect=(RoadDefect)iter.next() ;
if(i==0)
{
criteria=" roadDefectId = '" + roadDefect.getId() + "' ";
}
else
{
criteria=criteria + " or roadDefectId = '" + roadDefect.getId() + "' ";
}
i=i+1;
}
//purge task
if(criteria !=null)
{
Log.info("Purge Task = " + "delete from " + TableNameConstants.TASK_TABLENAME + " where " + criteria);
stat.execute("delete from " + TableNameConstants.TASK_TABLENAME + " where " + criteria );
}
//purge road inspection
if(criteria !=null)
{
Log.info("Purge Task = " + "delete from " + TableNameConstants.ROADINSPECTION_TABLENAME + " where " + criteria);
stat.execute("delete from " + TableNameConstants.ROADINSPECTION_TABLENAME + " where " + criteria );
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new DataAccessResourceFailureException ("Exception occured when purge Task and Road Inspection.");
}
Log.info("mcaps.apps.prrm.roaddefect.dao.hibernate.RoadDefectDAOHibernate purgeRoadDefect Count =" + count);
//purge road defect
getHibernateTemplate ().deleteAll (list);
return count;
}
public int copyRoadDefectToFile (Date startDate, Date endDate) {
// TODO Auto-generated method stub
String roadDefectTable = TableNameConstants.ROADDEFECT_TABLENAME;
String contactTable = TableNameConstants.CONTACT_TABLENAME;
String taskTable=TableNameConstants.TASK_TABLENAME;
String roadInspectionTable=TableNameConstants.ROADINSPECTION_TABLENAME;
StringBuffer sb = new StringBuffer();
//Get the file name prefix
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
dateFormat.setLenient(false);
sb.append(dateFormat.format(new Date())).append("_");
String roadDefectFile = sb.toString() + roadDefectTable + ".dat";
String contactFile = sb.toString() + contactTable + ".dat";
String taskFile=sb.toString() + taskTable + ".dat";
String roadInspectionFile=sb.toString() + roadInspectionTable + ".dat";
if(startDate ==null)
{
Calendar cal=Calendar.getInstance();
cal.set(0,0,0);
startDate= new Date(cal.getTimeInMillis());
}
if(endDate ==null)
{
Calendar cal=Calendar.getInstance();
cal.set(9999,0,0);
endDate= new Date(cal.getTimeInMillis());
}
HibernateTemplate template = getHibernateTemplate ();
Session sess=template.getSessionFactory().openSession();
SQLQuery query;
List roadDefects=this.getClosedRoadDefects(startDate,endDate);
try{
query=sess.createSQLQuery("select " + roadDefectTable + ".* into outfile '" + roadDefectFile + "' from " + roadDefectTable + " where " +
" lastModifiedTime between :begin and :end and status='" + RoadDefectStatus.CLOSED + "'");
// Export RoadDefect
query.setDate("begin",startDate);
query.setDate("end",endDate);
query.list();
}
catch(org.hibernate.exception.GenericJDBCException ex)
{//do nothing
}
try{
query=sess.createSQLQuery("select " + contactTable + ".* into outfile '" + contactFile + "' from " + contactTable + " where " +
" lastModifiedTime between :begin and :end");
// Export RoadDefect
query.setDate("begin",startDate);
query.setDate("end",endDate);
query.list();
}catch(org.hibernate.exception.GenericJDBCException ex)
{
//do nothing
}
//Export Task
Iterator iter=roadDefects.iterator();
while(iter.hasNext())
{
RoadDefect roadDefect=(RoadDefect)iter.next();
try{
query=sess.createSQLQuery("select " + taskTable + ".* into outfile '" + taskFile + "' from " + taskTable + " where " +
" roadDefectId = :roadDefectId");
// Export RoadDefect
query.setInteger("roadDefectId",roadDefect.getId().intValue() );
query.list();
}catch(org.hibernate.exception.GenericJDBCException ex)
{
//do nothing
}
}
//Export Inspection Report
iter=roadDefects.iterator();
while(iter.hasNext())
{
RoadDefect roadDefect=(RoadDefect)iter.next();
try{
query=sess.createSQLQuery("select " + roadInspectionTable + ".* into outfile '" + roadInspectionFile + "' from " + roadInspectionTable + " where " +
" roadDefectId = :roadDefectId");
// Export RoadDefect
query.setInteger("roadDefectId",roadDefect.getId().intValue() );
query.list();
}catch(org.hibernate.exception.GenericJDBCException ex)
{
//do nothing
}
}
return purgeRoadDefect(startDate,endDate);
}
public List getClosedRoadDefects (Date startLastModifiedTime, Date endLastModifiedTime) {
// TODO Auto-generated method stub
String roadDefectTable = TableNameConstants.ROADDEFECT_TABLENAME;
HibernateTemplate template = getHibernateTemplate ();
if(startLastModifiedTime ==null)
{
Calendar cal=Calendar.getInstance();
cal.set(0,0,0);
startLastModifiedTime= new Date(cal.getTimeInMillis());
}
if(endLastModifiedTime ==null)
{
Calendar cal=Calendar.getInstance();
cal.set(9999,0,0);
endLastModifiedTime= new Date(cal.getTimeInMillis());
}
Log.info("mcaps.apps.prrm.roaddefect.dao.hibernate.RoadDefectDAOHibernate getRoadDefects startLastModifiedTime =" + startLastModifiedTime);
Log.info("mcaps.apps.prrm.roaddefect.dao.hibernate.RoadDefectDAOHibernate getRoadDefects endLastModifiedTime =" + endLastModifiedTime);
Session sess=template.getSessionFactory().openSession();
Query query=sess.createQuery(" from " + roadDefectTable + " where " +
" lastModifiedTime between :begin and :end and status='" + RoadDefectStatus.CLOSED + "'");
query.setDate("begin",startLastModifiedTime);
query.setDate("end",endLastModifiedTime);
List list=query.list();
return list;
}
public void changeRoadDefectStatus (Integer roadDefectID, String status) {
RoadDefect roadDefect=this.getRoadDefect(roadDefectID);
roadDefect.setStatus(status);
Date date = new Date();
roadDefect.setLastModifiedTime(date);
this.saveRoadDefect(roadDefect);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?