_baserootdao.java

来自「《精通Spring》源代码」· Java 代码 · 共 838 行 · 第 1/2 页

JAVA
838
字号
package com.openv.spring.base;

import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import net.sf.hibernate.Criteria;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Query;
import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.SessionFactory;

import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.expression.Expression;
import net.sf.hibernate.expression.Order;
import net.sf.hibernate.type.Type;

/**
 * This class has been automatically generated by Hibernate Synchronizer. For
 * more information or documentation, visit The Hibernate Synchronizer page at
 * http://www.binamics.com/hibernatesync or contact Joe Hudson at
 * joe@binamics.com.
 */
public abstract class _BaseRootDAO {

    protected static Map sessionFactoryMap = new HashMap();

    protected static ThreadLocal threadedSessions = new ThreadLocal();

    /**
     * Configure the session factory by reading hibernate config file
     */
    public static void initialize() throws HibernateException {
        initialize((String) null);
    }

    /**
     * Configure the session factory by reading hibernate config file
     * 
     * @param configFileName
     *            the name of the configuration file
     */
    public static void initialize(String configFileName)
            throws HibernateException {
        if (null == configFileName && sessionFactoryMap.size() > 0)
            return;
        else if (null != sessionFactoryMap.get(configFileName))
            return;
        else {
            Configuration cfg = new Configuration();
            if (null == configFileName)
                cfg.configure();
            else
                cfg.configure(configFileName);
            setSessionFactory(configFileName, cfg.buildSessionFactory());
        }
    }

    /**
     * Set the session factory
     */
    protected static void setSessionFactory(SessionFactory sessionFactory) {
        setSessionFactory((String) null, sessionFactory);
    }

    /**
     * Set the session factory
     */
    protected static void setSessionFactory(String configFileName,
            SessionFactory sessionFactory) {
        sessionFactoryMap.put(configFileName, sessionFactory);
    }

    /**
     * Return the SessionFactory that is to be used by these DAOs. Change this
     * and implement your own strategy if you, for example, want to pull the
     * SessionFactory from the JNDI tree.
     */
    protected SessionFactory getSessionFactory() throws HibernateException {
        return getSessionFactory(getConfigurationFileName());
    }

    private static SessionFactory getSessionFactory(String configFile)
            throws HibernateException {
        if (sessionFactoryMap.size() == 1)
            return (SessionFactory) sessionFactoryMap.values().toArray()[0];
        else {
            SessionFactory sessionFactory = (SessionFactory) sessionFactoryMap
                    .get(configFile);
            if (null == sessionFactory)
                if (null == configFile)
                    throw new RuntimeException(
                            "The session factory has not been initialized.");
                else
                    throw new RuntimeException("The session factory for '"
                            + configFile + "' has not been initialized.");
            else
                return sessionFactory;
        }
    }

    /**
     * Return a new Session object that must be closed when the work has been
     * completed.
     * 
     * @return the active Session
     */
    protected Session getSession() throws HibernateException {
        return createSession();
    }

    /**
     * Return a new Session object that must be closed when the work has been
     * completed.
     * 
     * @return the active Session
     */
    public static Session createSession() throws HibernateException {
        return createSession(null);
    }

    /**
     * Return a new Session object that must be closed when the work has been
     * completed.
     * 
     * @param configFile
     *            the config file must match the meta attribute "config-file" in
     *            the hibernate mapping file
     * @return the active Session
     */
    public static Session createSession(String configFile)
            throws HibernateException {
        java.util.Stack sessionStack = (java.util.Stack) threadedSessions.get();
        Session session = null;
        if (null == sessionStack) {
            sessionStack = new java.util.Stack();
            threadedSessions.set(sessionStack);
        }
        if (sessionStack.size() > 0) {
            Object[] arr = (Object[]) sessionStack.peek();
            String cf = (String) arr[0];
            if (null == cf) {
                session = (Session) arr[1];
            } else if (null != cf && null != configFile) {
                if (cf.equals(configFile))
                    session = (Session) arr[1];
            }
            if (null == session) {
                session = getSessionFactory(configFile).openSession();
                arr = new Object[2];
                arr[0] = configFile;
                arr[1] = session;
                sessionStack.push(arr);
            }
        } else {
            session = getSessionFactory(configFile).openSession();
            Object[] arr = new Object[2];
            arr = new Object[2];
            arr[0] = configFile;
            arr[1] = session;
            sessionStack.push(arr);
        }
        return session;
    }

    /**
     * Return the name of the configuration file to be used with this DAO or
     * null if default
     */
    public String getConfigurationFileName() {
        return null;
    }

    /**
     * Return the specific Object class that will be used for class-specific
     * implementation of this DAO.
     * 
     * @return the reference Class
     */
    protected abstract Class getReferenceClass();

    /**
     * Close the session
     */
    public void closeSession() throws HibernateException {
        java.util.Stack sessionStack = (java.util.Stack) threadedSessions.get();
        if (null != sessionStack) {
            Object[] arr = (Object[]) sessionStack.peek();
            String cf = (String) arr[0];
            if (null == cf) {
                Session session = (Session) arr[1];
                session.close();
                sessionStack.pop();
            } else {
                String configurationFile = getConfigurationFileName();
                if (null != configurationFile && configurationFile.equals(cf)) {
                    Session session = (Session) arr[1];
                    session.close();
                    sessionStack.pop();
                }
            }
        }
    }

    /**
     * Begin the transaction related to the session
     */
    public Transaction beginTransaction(Session s) throws HibernateException {
        return s.beginTransaction();
    }

    /**
     * Commit the given transaction
     */
    public void commitTransaction(Transaction t) throws HibernateException {
        t.commit();
    }

    /**
     * Execute a query.
     * 
     * @param query
     *            a query expressed in Hibernate's query language
     * @return a distinct list of instances (or arrays of instances)
     */
    public java.util.List find(String query) throws HibernateException {
        Session s = null;
        try {
            s = getSession();
            return find(query, s);
        } finally {
            closeSession();
        }
    }

    /**
     * Perform a find but use the session given instead of creating a new one.
     * 
     * @param query
     *            a query expressed in Hibernate's query language
     * @s the Session to use
     */
    public java.util.List find(String query, Session s)
            throws HibernateException {
        return s.find(query);
    }

    /**
     * Return all objects related to the implementation of this DAO with no
     * filter.
     */
    public java.util.List findAll() throws HibernateException {
        Session s = null;
        try {
            s = getSession();
            return findAll(s);
        } finally {
            closeSession();
        }
    }

    /**
     * Return all objects related to the implementation of this DAO with no
     * filter. Use the session given.
     * 
     * @param s
     *            the Session
     */
    public java.util.List findAll(Session s) throws HibernateException {
        return findAll(s, getDefaultOrderProperty());
    }

    /**
     * Return all objects related to the implementation of this DAO with no
     * filter.
     */
    public java.util.List findAll(String orderProperty)
            throws HibernateException {
        Session s = null;
        try {
            s = getSession();
            return findAll(s, orderProperty);
        } finally {
            closeSession();
        }
    }

    /**
     * Return all objects related to the implementation of this DAO with no
     * filter. Use the session given.
     * 
     * @param s
     *            the Session
     */
    public java.util.List findAll(Session s, String orderProperty)
            throws HibernateException {
        Criteria crit = createCriteria(s);
        if (null != orderProperty)
            crit.addOrder(Order.asc(orderProperty));
        return crit.list();
    }

    /**
     * Return all objects related to the implementation of this DAO with a
     * filter. Use the session given.
     * 
     * @param propName
     *            the name of the property to use for filtering
     * @param filter
     *            the value of the filter
     */
    protected java.util.List findFiltered(String propName, Object filter)
            throws HibernateException {
        return findFiltered(propName, filter, getDefaultOrderProperty());
    }

    /**
     * Return all objects related to the implementation of this DAO with a
     * filter. Use the session given.
     * 
     * @param propName
     *            the name of the property to use for filtering
     * @param filter
     *            the value of the filter
     * @param orderProperty
     *            the name of the property used for ordering
     */
    protected java.util.List findFiltered(String propName, Object filter,
            String orderProperty) throws HibernateException {
        Session s = null;
        try {
            s = getSession();
            return findFiltered(s, propName, filter, getDefaultOrderProperty());
        } finally {
            closeSession();
        }
    }

    /**
     * Return all objects related to the implementation of this DAO with a
     * filter. Use the session given.
     * 
     * @param s
     *            the Session
     * @param propName
     *            the name of the property to use for filtering
     * @param filter
     *            the value of the filter
     * @param orderProperty
     *            the name of the property used for ordering
     */
    protected java.util.List findFiltered(Session s, String propName,
            Object filter, String orderProperty) throws HibernateException {
        Criteria crit = createCriteria(s);
        crit.add(Expression.eq(propName, filter));
        if (null != orderProperty)
            crit.addOrder(Order.asc(orderProperty));
        return crit.list();
    }

    /**
     * Obtain an instance of Query for a named query string defined in the
     * mapping file.
     * 
     * @param name
     *            the name of a query defined externally
     * @return Query
     */
    public java.util.List getNamedQuery(String name) throws HibernateException {
        Session s = null;
        try {
            s = getSession();
            return getNamedQuery(name, s);
        } finally {
            closeSession();
        }
    }

    /**
     * Obtain an instance of Query for a named query string defined in the
     * mapping file. Use the session given.
     * 
     * @param name
     *            the name of a query defined externally
     * @param s
     *            the Session
     * @return Query
     */
    public java.util.List getNamedQuery(String name, Session s)
            throws HibernateException {
        Query q = s.getNamedQuery(name);
        return q.list();
    }

    /**
     * Obtain an instance of Query for a named query string defined in the
     * mapping file. Use the parameters given.
     * 
     * @param name
     *            the name of a query defined externally
     * @param params
     *            the parameter array
     * @return Query
     */
    public java.util.List getNamedQuery(String name, Serializable[] params)
            throws HibernateException {
        Session s = null;
        try {
            s = getSession();
            return getNamedQuery(name, params, s);
        } finally {
            closeSession();
        }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?