Class HibernateUtil

  • All Implemented Interfaces:
    DBConstants, JaliosConstants

    public class HibernateUtil
    extends java.lang.Object
    implements DBConstants, JaliosConstants
    Helper class providing static methods to perform common database operation using Hibernate.
    Since:
    jcms-6.0
    Version:
    $Revision: 135812 $
    • Constructor Summary

      Constructors 
      Constructor Description
      HibernateUtil()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static void beginTransaction()
      Begins a new transaction in the session of the current thread.
      static org.hibernate.criterion.Criterion buildAndCriterion​(org.hibernate.criterion.Criterion c1, org.hibernate.criterion.Criterion c2)
      Returns the AND of the two criterion.
      static org.hibernate.criterion.Criterion buildCollectionCriterion​(java.lang.Class clazz, java.lang.String property, java.lang.Object value, org.hibernate.type.Type valueType, boolean equality)
      Apply a constraint on a value of the collection of the given clazz.
      static org.hibernate.criterion.Criterion buildCollectionCriterion​(java.lang.Class clazz, java.lang.String property, java.lang.String value)
      Apply a constraint on a value of the collection of the given clazz.
      static org.hibernate.criterion.Criterion buildCollectionCriterion​(java.lang.String entityTable, java.lang.String idColumn, java.lang.String collectionTable, java.lang.String itemIdColumn, java.lang.String valueColumn, java.lang.Object value, org.hibernate.type.Type valueType, boolean equality)
      Apply a constraint on a value of the collection of the given entity.
      static <T> org.hibernate.criterion.Criterion buildInCriterion​(java.lang.String propertyName, java.util.Collection<T> values)
      Returns an "in" criterion.
      static <T> org.hibernate.criterion.Criterion buildInCriterion​(java.lang.String propertyName, java.util.Collection<T> values, int max)
      Returns an "in" criterion.
      static java.lang.String buildJcmsId​(java.lang.Class<?> clazz, java.lang.Long rowId)
      Generates the internal JCMS id for the given database object.
      static org.hibernate.criterion.Criterion buildOrCriterion​(org.hibernate.criterion.Criterion c1, org.hibernate.criterion.Criterion c2)
      Returns the OR of the two criterion.
      static <T> org.hibernate.Query buildQueryCollection​(java.lang.Class<? extends T> clazz, java.lang.String property, java.lang.Object value, boolean retreiveRowId)
      Returns the Hibernate query to search the instance of the given class with the collection property matching the given value.
      static org.hibernate.Criteria buildQueryCriteria​(org.hibernate.Session session, java.lang.Class<?> clazz, java.lang.String[] properties, java.lang.Object[] values, java.lang.String orderBy, int firstResult, int maxResults)
      Retrieves the result(s) matching the specified parameters.
      static org.hibernate.Criteria buildQueryCriteria​(org.hibernate.Session session, java.lang.Class<?> clazz, java.lang.String[] properties, java.lang.Object[] values, java.lang.String orderBy, int firstResult, int maxResults, boolean cacheable)
      Retrieves the result(s) matching the specified parameters.
      static java.lang.String checkSQLInjection​(java.lang.String... strings)
      Checks if the given strings may contains an SQL injection.
      static void clearCache()  
      static void closeSession()
      Close the hibernate session of the current thread.
      static void commitTransaction()
      Commits the transaction of the current thread if it exists.
      static void commitTransactionWithoutSendHibernateEvent()
      Commits the transaction of the current thread if it exists but NEVER call the code about hibernate send event.
      static org.hibernate.Criteria createCriteria​(java.lang.Class clazz)
      Returns a criteria for the given clazz.
      static boolean dateEquals​(java.util.Date date1, java.util.Date date2)
      Check if both date are equals, skipping any difference due to Timestamp implemantation.
      static void delete​(DBData data)
      Deletes the specified object in the database.
      static void delete​(DBData data, boolean cleanSession)
      Deletes the specified object in the database.
      static void delete​(java.lang.String id)
      Deletes the specified object in the database.
      static int deleteQuery​(java.lang.Class<?> clazz, java.lang.String[] properties, java.lang.Object[] values)
      Delete all object matching the specified parameters.
      static int deleteQuery​(java.lang.Class<?> clazz, java.lang.String[] properties, java.lang.Object[] values, boolean cleanSession)
      Delete all object matching the specified parameters.
      static int deleteQuery​(java.lang.Class<?> clazz, java.lang.String property, java.lang.Object value)
      Delete all object matching the specified parameters.
      static int deleteQuery​(java.lang.Class<?> clazz, java.lang.String property, java.lang.Object value, boolean cleanSession)
      Delete all object matching the specified parameters.
      static void detectDatabaseFeatures()
      Check the features supported by the database.
      static void evict​(java.lang.Object obj)
      Removes this instance from the Hibernate session cache to avoid automatic persistence by dirty checking.
      static void excludeFromCommit​(java.lang.Object entity, boolean exclude)
      Add or remove the specified object to internal collection of entity to be evicted right before the next commit.
      static java.util.List execQuery​(java.lang.String hql)
      Execute the specified hibernate query using the current thread's session.
      static java.util.List execQuery​(java.lang.String hql, int firstResult, int maxResults)
      Execute the specified hibernate query using the current thread's session.
      static java.util.List execQuery​(org.hibernate.Query query)
      Execute the specified hibernate query using the current thread's session.
      static java.util.Iterator execQueryIterator​(java.lang.String hql)
      Execute the specified hibernate query using the current thread's session.
      static java.util.Iterator execQueryIterator​(org.hibernate.Query query)
      Execute the specified hibernate query using the current thread's session.
      static java.lang.Object execQueryUnique​(java.lang.String hql)
      Execute the specified hibernate query using the current thread's session.
      static int execUpdate​(java.lang.String hql)
      Execute the update or delete HQL statement.
      static int execUpdate​(org.hibernate.Query query)
      Execute the update or delete query.
      static <T> T executeTransaction​(Transaction<T> transaction)
      Execute the action specified by the given action object within a Session.
      static Member getAuthorFromEventState​(java.lang.Object[] state)  
      static java.util.Set<java.util.Set<java.lang.Long>> getBatchSet​(java.util.Collection<java.lang.Long> idColl, int batchSize)
      Convenient method to convert a Collection of rowId into many smaller collections, allowing batch select using method getDBDataList(Class, Collection).
      static java.util.Date getCdateFromEventState​(java.lang.Object[] state)  
      static Data getCurrentData​(java.lang.String id)
      Return the current persisted state of the Data with the given id.
      static java.util.Date getCurrentDate()
      Returns a new date.
      static DBData getCurrentDBData​(java.lang.String id)
      Return the current persisted state of the DBData with the given id.
      static java.lang.Object getCurrentObject​(java.lang.Class clazz, java.lang.Long rowId)
      Return the current persisted state of the object with the given rowId.
      static Data getData​(java.lang.String id)
      Retrieves the Data bound to the specified jcms id from the database.
      static <T extends Data>
      T
      getDataFromEventState​(java.lang.Object[] state, java.lang.Class<T> clazz, int fieldIndex)  
      protected static java.util.Date getDate​(java.util.Date date)
      Return a new java.util.Date if the specified Date is a timestamp, otherwise return the date as is.
      static DBData getDBData​(java.lang.String id)
      Retrieves the DBData bound to the specified jcms id from the database.
      static <T> java.util.Iterator<T> getDBDataIterator​(java.lang.Class<T> clazz)
      Retrieve all Objects of the specified class from the database.
      static <T> java.util.List<T> getDBDataList​(java.lang.Class<T> clazz)
      Retrieve all Objects of the specified class from the database (limited to maxResults).
      static <T> java.util.List<T> getDBDataList​(java.lang.Class<T> clazz, int firstResult, int maxResults)
      Retrieve all Objects of the specified class from the database.
      static <T> java.util.List<T> getDBDataList​(java.lang.Class<T> clazz, java.util.Collection<java.lang.Long> rowIdColl)
      Retrieve a List of Objects from their Class and rowId.
      static java.util.Date getMdateFromEventState​(java.lang.Object[] state)  
      static java.lang.Object getObject​(java.lang.Class clazz, java.lang.Long rowId)
      Retrieves the Object of the specified class and using the specified id.
      static java.lang.Object getObject​(org.hibernate.Session session, java.lang.Class clazz, java.lang.Long rowId)
      Retrieves the Object of the specified class and using the specified id in the given session.
      static <T> T getObjectFromEventState​(java.lang.Object[] state, java.lang.Class<T> clazz, int fieldIndex)  
      static java.lang.Long getRowId​(java.lang.String id)
      Retrieve the row id from a DBData id
      static java.util.Set<java.util.Set<java.lang.Long>> getRowIdBatchSet​(java.util.Collection<java.lang.String> idColl, int batchSize)
      Convenient method to convert a Collection of id into many smaller collections, allowing batch select using method getDBDataList(Class, Collection).
      static org.hibernate.Session getSession()
      Retrieve and open an hibernate session for the current thread
      static org.hibernate.SessionFactory getSessionFactory()
      Retrieve the Hibernate SessionFactory singleton
      static void handleTimeoutException​(java.lang.Throwable th)
      Handle time out exception
      static boolean hasActiveTransaction()
      Check if the current thread has a valid and active transaction.
      static boolean isDBDataJcmsId​(java.lang.String id)  
      static boolean isVarcharInBytes()
      Returns true if the database count varchar length in bytes (i.e.
      static java.lang.Object[] parseJcmsId​(java.lang.String id)
      Returns the 2 component of the given JCMS ID.
      static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz, java.lang.String orderBy)
      Retrieves all object of the specified Class.
      static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz, java.lang.String[] properties, java.lang.Object[] values)
      Retrieves all object matching the specified parameters.
      static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz, java.lang.String[] properties, java.lang.Object[] values, java.lang.String orderBy)
      Retrieves all object matching the specified parameters.
      static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz, java.lang.String property, java.lang.Object value)
      Retrieves all object matching the specified parameters.
      static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz, java.lang.String property, java.lang.Object value, java.lang.String orderBy)
      Retrieves all object matching the specified parameters.
      static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz, java.util.Map<java.lang.String,​java.lang.Object> paramsMap)
      Retrieves all object matching the specified parameters.
      static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz, java.util.Map<java.lang.String,​java.lang.Object> paramsMap, java.lang.String orderBy)
      Retrieves all object matching the specified parameters.
      static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz, java.util.Map<java.lang.String,​java.lang.Object> paramsMap, java.lang.String orderBy, int firstResult, int maxResults)
      Retrieves all object matching the specified parameters.
      static <T> java.util.List<T> query​(java.lang.Class<T> clazz)
      Retrieves all object of the specified Class.
      static <T> java.util.List<T> queryCollection​(java.lang.Class<? extends T> clazz, java.lang.String property, java.lang.Object value)
      Retreives the instance of the given class with the collection property matching the given value.
      static <T> java.util.List<java.lang.Long> queryCollectionRowId​(java.lang.Class<? extends T> clazz, java.lang.String property, java.lang.Object value)
      Retreives the instance of the given class with the collection property matching the given value.
      static int queryCount​(java.lang.Class<?> clazz)
      Returns the count of objects matching the given class.
      static int queryCount​(java.lang.Class<?> clazz, java.lang.String[] properties, java.lang.Object[] values)
      Returns the count of objects matching the given class with the given criteria.
      static int queryCount​(java.lang.Class<?> clazz, java.lang.String property, java.lang.Object value)
      Returns the count of objects matching the given class with the given criteria.
      static int queryCount​(java.lang.Class<?> clazz, org.hibernate.criterion.Criterion criterion)
      Returns the count of objects matching the given class with the given criterion.
      static int queryCount​(org.hibernate.Criteria criteria)
      Returns the count of objects matching the given criteria.
      static int queryCount​(org.hibernate.Criteria criteria, boolean distinct)  
      static int queryCountExact​(java.lang.Class<?> clazz)
      Returns the count of objects matching the exact specified class, without using polymorphism.
      static PageResult<Publication> queryPublication​(PublicationCriteria pubCriteria)
      Returns a list of publications in the database matching the given criteria.
      static <T> T queryUnique​(java.lang.Class<? extends T> clazz, java.lang.String[] properties, java.lang.Object[] values)
      Retrieves a unique object matching the specified parameters.
      static <T> T queryUnique​(java.lang.Class<? extends T> clazz, java.lang.String[] properties, java.lang.Object[] values, java.lang.String orderBy)
      Retrieves a unique object matching the specified parameters.
      static <T> T queryUnique​(java.lang.Class<? extends T> clazz, java.lang.String property, java.lang.Object value)
      Retrieves a unique object matching the specified parameters.
      static void removeSecondLevelCacheEntry​(java.lang.String id)
      Removes a DBData from the second level cache.
      static void removeSecondLevelCacheEntry​(java.lang.String entityName, java.lang.Long rowId)
      Removes a DBData from the second level cache.
      static void rollbackTransaction()
      Rollback the transaction of the current thread if it exists.
      static void save​(Data data)
      Saves or updates the specified Data in the database.
      static void save​(java.lang.Object obj)
      Saves or updates the specified Object in the database.
      static org.hibernate.ScrollableResults scroll​(java.lang.Class clazz)
      Scroll over a class.
      static org.hibernate.ScrollableResults scroll​(java.lang.Class clazz, org.hibernate.ScrollMode scrollMode)
      Scroll over a class with a given scroll mode.
      static <T> org.hibernate.ScrollableResults scrollCollection​(java.lang.Class<? extends T> clazz, java.lang.String property, java.lang.Object value, boolean retreiveRowId)
      Scroll the instance of the given class with the collection property matching the given value.
      static boolean supportClobCollectionUpdate()
      Returns true if the database supports updating collection of CLOB using a where clause as opposed to specifying a completely new set of values.
      static boolean supportDateMillis()
      Returns true if the database supports millis for date.
      static boolean supportFullJoin()
      Returns true if the database supports full join.
      static java.lang.String truncateVarchar​(java.lang.String value)
      Returns the value truncated to the varchar length (i.e.
      static <T> java.util.List<T> updateCollection​(java.util.List<T> listToUpdate, java.util.List<T> newValues, boolean isLargeText)
      Return an updated List enforcing constraint required by Hibernate and current database
      static <T> java.util.Set<T> updateCollection​(java.util.Set<T> setToUpdate, java.util.Set<T> newValues, boolean isLargeText)
      Return an updated Set enforcing constraint required by Hibernate and current database
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • HIBERNATE_CAPABILITIES_PREFIX

        protected static java.lang.String HIBERNATE_CAPABILITIES_PREFIX
    • Constructor Detail

      • HibernateUtil

        public HibernateUtil()
    • Method Detail

      • getSessionFactory

        public static org.hibernate.SessionFactory getSessionFactory()
        Retrieve the Hibernate SessionFactory singleton
        Returns:
        the SessionFactory singleton
        Since:
        jcms-6.0
      • getSession

        public static org.hibernate.Session getSession()
                                                throws org.hibernate.HibernateException
        Retrieve and open an hibernate session for the current thread
        Returns:
        an opened Session ready to be used for hibernate transaction
        Throws:
        org.hibernate.HibernateException - if error occured with database
        Since:
        jcms-6.0
      • closeSession

        public static void closeSession()
                                 throws org.hibernate.HibernateException
        Close the hibernate session of the current thread.
        Throws:
        org.hibernate.HibernateException - if error occured with database
        Since:
        jcms-6.0
      • beginTransaction

        public static void beginTransaction()
                                     throws org.hibernate.HibernateException
        Begins a new transaction in the session of the current thread.
        Throws:
        org.hibernate.HibernateException - if error occured with database
        Since:
        jcms-6.0
      • hasActiveTransaction

        public static boolean hasActiveTransaction()
        Check if the current thread has a valid and active transaction.

        An active transaction is begun, non commited, non rollbacked, without commit failed.
        In JCMS, an inactive transaction generally indicates a database failure or a forgotten call to beginTransaction().

        Use this method to improve code robustness, by skipping optional database operations that would fail without an active transaction.

        Returns:
        true if there is an active transaction ready for use, false if there is no transaction for current thread
        Since:
        JCMS-5756
      • commitTransaction

        public static void commitTransaction()
                                      throws org.hibernate.HibernateException
        Commits the transaction of the current thread if it exists.
        Throws:
        org.hibernate.HibernateException - if error occured with database
        Since:
        jcms-6.0
      • rollbackTransaction

        public static void rollbackTransaction()
        Rollback the transaction of the current thread if it exists.
        Since:
        jcms-6.0
      • commitTransactionWithoutSendHibernateEvent

        public static void commitTransactionWithoutSendHibernateEvent()
                                                               throws org.hibernate.HibernateException
        Commits the transaction of the current thread if it exists but NEVER call the code about hibernate send event.
        Throws:
        org.hibernate.HibernateException - if error occured with database
        Since:
        jcms-10.0.6
      • executeTransaction

        public static <T> T executeTransaction​(Transaction<T> transaction)
                                        throws org.hibernate.TransactionException
        Execute the action specified by the given action object within a Session.

        A TransactionException can be thrown when there is any Exception: It gets propagated to the caller of this method.

        Allows for returning a result object, that is a domain object or a collection of domain objects.

        Note: code of Transaction implementation is not supposed to manage transactions itself! Generally, code of Transaction implementation must not touch any Session lifecycle methods, like close, disconnect, or reconnect, to let this method do its work.

        Examples:

         // Example with id as result
         String myDataId = HibernateUtil.executeTransaction(new Transaction<String>() {
           @Override
           public String execute(Session session) {
             MyData myData = new MyData();
             myData.setTitle("new title");
             [...]
             myData.performCreate(admin);
             return myData.getId();
           }
         });
         
         // Example with domain object as result
         MyData myData = HibernateUtil.executeTransaction(new Transaction<MyData>() {
           @Override
           public MyData execute(Session session) {
             MyData myData = new MyData();
             myData.setTitle("new title");
             [...]
             myData.performCreate(admin);
             return myData;
           }
         });
         
         // Example with collection of domain objects as result
         List<MyData> myDataList = HibernateUtil.executeTransaction(new Transaction<List<MyData>>() {
           @Override
           public List<MyData> execute(Session session) {
             Criteria criteria = HibernateUtil.getSession().createCriteria(MyData.class);
             criteria.add(Restrictions.ilike("title", "%title%"));
             return criteria.list();
           }
         });
         
         // Example with no result
         HibernateUtil.executeTransaction(new Transaction<Void>() {
           @Override
           public Void execute(Session session) {
             Member member = voterMembers.get(index);
             VoteManager.getInstance().performVote(article, member, true);
             article.trackReader(member);
             return null;
           }
         });
         
        Type Parameters:
        T - type of the result object
        Parameters:
        transaction - Transaction
        Returns:
        a result object returned by the action, or null
        Throws:
        org.hibernate.TransactionException - if there is any Exception
        See Also:
        Transaction, Session
      • buildJcmsId

        public static java.lang.String buildJcmsId​(java.lang.Class<?> clazz,
                                                   java.lang.Long rowId)
        Generates the internal JCMS id for the given database object.
        Parameters:
        clazz - the Class of the object (required)
        rowId - the row id in the database table (required)
        Returns:
        the internal JCMS id for the given database object.
        Throws:
        java.lang.IllegalArgumentException - if clazz or rowId is null
        Since:
        jcms-6.0.0
      • isDBDataJcmsId

        public static boolean isDBDataJcmsId​(java.lang.String id)
      • execQueryUnique

        public static java.lang.Object execQueryUnique​(java.lang.String hql)
        Execute the specified hibernate query using the current thread's session.

        Return the unique query result. If the query contains multiple results per row, the results are returned in an instance of Object[].

        Parameters:
        hql - the query as a string using the hibernate query language
        Returns:
        the result or null if it could not be found (or if an error occured)
        Since:
        jcms-6.0
      • execQuery

        public static java.util.List execQuery​(java.lang.String hql)
        Execute the specified hibernate query using the current thread's session.

        Return the query results as a List. If the query contains multiple results per row, the results are returned in an instance of Object[].

        Parameters:
        hql - the query as a string using the hibernate query language
        Returns:
        the result list (never return null)
        Since:
        jcms-6.0
      • execQuery

        public static java.util.List execQuery​(java.lang.String hql,
                                               int firstResult,
                                               int maxResults)
        Execute the specified hibernate query using the current thread's session.

        Return the query results as a List. If the query contains multiple results per row, the results are returned in an instance of Object[].

        Parameters:
        hql - the query as a string using the hibernate query language
        firstResult - set the first data to retrieve. If <= 0, rows will be retrieved beginning from first data (does not work with query on super classes).
        maxResults - set the maximum number of data to retrieve. If < 0, there is no limit to the number of data retrieved (does not work with query on super classes).
        Returns:
        the result list (never return null)
        Since:
        jcms-6.0
      • execQuery

        public static java.util.List execQuery​(org.hibernate.Query query)
        Execute the specified hibernate query using the current thread's session.

        Return the query results as a List. If the query contains multiple results per row, the results are returned in an instance of Object[].

        Parameters:
        query - the hibernate query
        Returns:
        the result list (never return null)
        Since:
        jcms-6.0
      • execQueryIterator

        public static java.util.Iterator execQueryIterator​(java.lang.String hql)
        Execute the specified hibernate query using the current thread's session.

        Return the query results as an Iterator. If the query contains multiple results pre row, the results are returned in an instance of Object[].
        Entities returned as results are initialized on demand. The first SQL query returns identifiers only.

        Parameters:
        hql - the query as a string using the hibernate query language
        Returns:
        the result iterator (never return null)
        Since:
        jcms-6.0
      • execQueryIterator

        public static java.util.Iterator execQueryIterator​(org.hibernate.Query query)
        Execute the specified hibernate query using the current thread's session.

        Return the query results as an Iterator. If the query contains multiple results pre row, the results are returned in an instance of Object[].
        Entities returned as results are initialized on demand. The first SQL query returns identifiers only.

        Parameters:
        query - the hibernate query
        Returns:
        the result iterator
        Since:
        jcms-6.0
      • execUpdate

        public static int execUpdate​(java.lang.String hql)
        Execute the update or delete HQL statement.
        Parameters:
        hql - the query as a string using the hibernate query language
        Returns:
        the number of entities updated or deleted.
        Since:
        jcms-6.0
      • execUpdate

        public static int execUpdate​(org.hibernate.Query query)
        Execute the update or delete query.
        Parameters:
        query - the Hibernate query
        Returns:
        the number of entities updated or deleted.
        Since:
        jcms-6.0
      • query

        public static <T> java.util.List<T> query​(java.lang.Class<T> clazz)
        Retrieves all object of the specified Class.

        Example to retrieve all ArchivedPublication.

         HibernateUtil.query(ArchivedPublication.class);
         
        Results will be sorted by cdate if the Class is a subclass of Data, otherwise, results are not sorted.
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required must not be null
        Returns:
        a list of all object found in the database (never return null)
        Throws:
        java.lang.IllegalArgumentException - if clazz is null
        Since:
        jcms-6.0
      • query

        public static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz,
                                                  java.lang.String orderBy)
        Retrieves all object of the specified Class.

        Example to retrieve all ArchivedPublication order by rowId.

         HibernateUtil.query(ArchivedPublication.class, "rowId");
         
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required must not be null
        orderBy - the names of the fields to be used to order the results (comma separeted). You can append "asc" or "desc" to indicate the order direction. Default is ascending.
        Returns:
        a list of all object found in the database (never return null)
        Throws:
        java.lang.IllegalArgumentException - if clazz is null
        Since:
        jcms-6.0
      • query

        public static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz,
                                                  java.lang.String property,
                                                  java.lang.Object value)
        Retrieves all object matching the specified parameters.

        Example to retrieve all ReaderTracker of a publication

         HibernateUtil.query(ReaderTracker.class, "publicationId", pub.getId());
         
        Results will be sorted by cdate if the Class is a subclass of Data, otherwise, results are not sorted.
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required must not be null
        property - a field name. All results are return if null.
        value - the value of the field to match. All results are return if null.
        Returns:
        a list of all object found in the database (never return null)
        Throws:
        java.lang.IllegalArgumentException - if clazz is null
        Since:
        jcms-6.0
      • query

        public static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz,
                                                  java.lang.String property,
                                                  java.lang.Object value,
                                                  java.lang.String orderBy)
        Retrieves all object matching the specified parameters.

        Example to retrieve all ExtraDBData of a member, order by extradbdata name

         HibernateUtil.query(ExtraDBData.class, "dataId", mbr.getId(), "extraName");
         
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required must not be null
        property - a field name. All results are return if null.
        value - the value of the field to match. All results are return if null.
        orderBy - the names of the fields to be used to order the results (comma separated). You can append "asc" or "desc" to indicate the order direction. Default is ascending.
        Returns:
        a list of all object found in the database (never return null)
        Throws:
        java.lang.IllegalArgumentException - if clazz is null
        Since:
        jcms-6.0
      • query

        public static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz,
                                                  java.lang.String[] properties,
                                                  java.lang.Object[] values)
        Retrieves all object matching the specified parameters.

        Example to retrieve ReaderTracker of a publication for a specific member.

         String[] properties = new String[] { "publicationId", "authorId" };
         String[] values = new String[] { pub.getId(), mbr.getId() };
         HibernateUtil.query(ReaderTracker.class, properties, values);
         
        Results will be sorted by cdate if the Class is a subclass of Data, otherwise, results are not sorted
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required must not be null
        properties - an array of fields name. All results are return if null or empty.
        values - an array of values to match, must be the same size as properties. All results are return if null or empty.
        Returns:
        a list of all object found in the database (never return null)
        Throws:
        java.lang.IllegalArgumentException - if clazz is null or if propreties and values are not of the same length
        Since:
        jcms-6.0
      • query

        public static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz,
                                                  java.lang.String[] properties,
                                                  java.lang.Object[] values,
                                                  java.lang.String orderBy)
        Retrieves all object matching the specified parameters.
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required must not be null
        properties - an array of fields name. All results are return if null or empty.
        values - an array of values to match, must be the same size as properties. All results are return if null or empty.
        orderBy - the names of the fields to be used to order the results (comma separated). You can append "asc" or "desc" to indicate the order direction. Default is ascending.
        Returns:
        a list of all object found in the database
        Throws:
        java.lang.IllegalArgumentException - if clazz is null or if propreties and values are not of the same length
        Since:
        jcms-6.0
      • queryUnique

        public static <T> T queryUnique​(java.lang.Class<? extends T> clazz,
                                        java.lang.String property,
                                        java.lang.Object value)
        Retrieves a unique object matching the specified parameters.
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required
        property - a field name. All results are return if null.
        value - the value of the field to match. All results are return if null.
        Returns:
        the object found in the database
        Throws:
        java.lang.IllegalArgumentException - if clazz is null
        Since:
        jcms-6.0
      • queryUnique

        public static <T> T queryUnique​(java.lang.Class<? extends T> clazz,
                                        java.lang.String[] properties,
                                        java.lang.Object[] values)
        Retrieves a unique object matching the specified parameters.
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required
        properties - an array of fields name. All results are return if null or empty.
        values - an array of values to match, must be the same size as properties. All results are return if null or empty.
        Returns:
        the object found in the database
        Throws:
        java.lang.IllegalArgumentException - if clazz is null or if propreties and values are not of the same length
        Since:
        jcms-6.0
      • queryUnique

        public static <T> T queryUnique​(java.lang.Class<? extends T> clazz,
                                        java.lang.String[] properties,
                                        java.lang.Object[] values,
                                        java.lang.String orderBy)
        Retrieves a unique object matching the specified parameters.
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required
        properties - an array of fields name. All results are return if null or empty.
        values - an array of values to match, must be the same size as properties. All results are return if null or empty.
        orderBy - the names of the fields to be used to order the results (comma separated). You can append "asc" or "desc" to indicate the order direction. Default is ascending.
        Returns:
        the object found in the database
        Throws:
        java.lang.IllegalArgumentException - if clazz is null or if propreties and values are not of the same length
        Since:
        jcms-6.0
      • query

        public static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz,
                                                  java.util.Map<java.lang.String,​java.lang.Object> paramsMap)
        Retrieves all object matching the specified parameters.

        Example to retrieve ReaderTracker of a publication for a specific member.

         Map<String, String> paramsMap = new HashMap<String, String>();
         paramsMap.put("publicationId", pub.getId());
         paramsMap.put("authorId", mbr.getId());
         HibernateUtil.query(ReaderTracker.class, paramsMap);
         
        Results will be sorted by cdate if the Class is a subclass of Data, otherwise, results are not sorted
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required
        paramsMap - a map of fields name and field value (if null or empty, no refinement is performed)
        Returns:
        a list of all object found in the database (never return null)
        Since:
        jcms-6.0
      • query

        public static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz,
                                                  java.util.Map<java.lang.String,​java.lang.Object> paramsMap,
                                                  java.lang.String orderBy)
        Retrieves all object matching the specified parameters.
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required must not be null
        paramsMap - a map of fields name and field value (if null or empty, no refinement is performed)
        orderBy - the names of the fields to be used to order the results (comma separated). You can append "asc" or "desc" to indicate the order direction. Default is ascending.
        Returns:
        a list of all object found in the database (never return null)
        Throws:
        java.lang.IllegalArgumentException - if clazz is null
        Since:
        jcms-6.0
      • query

        public static <T> java.util.List<T> query​(java.lang.Class<? extends T> clazz,
                                                  java.util.Map<java.lang.String,​java.lang.Object> paramsMap,
                                                  java.lang.String orderBy,
                                                  int firstResult,
                                                  int maxResults)
        Retrieves all object matching the specified parameters.
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required must not be null
        paramsMap - a map of fields name and field value (if null or empty, no refinement is performed)
        orderBy - the names of the fields to be used to order the results (comma separated). You can append "asc" or "desc" to indicate the order direction. Default is ascending.
        firstResult - set the first data to retrieve. If <= 0, rows will be retrieved beginning from first data (does not work with query on super classes).
        maxResults - set the maximum number of data to retrieve. If < 0, there is no limit to the number of data retrieved (does not work with query on super classes).
        Returns:
        a list of all object found in the database (never return null)
        Throws:
        java.lang.IllegalArgumentException - if clazz is null
        Since:
        jcms-6.0
      • handleTimeoutException

        public static void handleTimeoutException​(java.lang.Throwable th)
        Handle time out exception
        Parameters:
        th - the throwable
        Since:
        jcms-6.1.3
      • createCriteria

        public static org.hibernate.Criteria createCriteria​(java.lang.Class clazz)
        Returns a criteria for the given clazz.
        Parameters:
        clazz - the class
        Returns:
        a criteria for the given clazz.
        Since:
        jcms-10.0.0
      • buildQueryCriteria

        public static org.hibernate.Criteria buildQueryCriteria​(org.hibernate.Session session,
                                                                java.lang.Class<?> clazz,
                                                                java.lang.String[] properties,
                                                                java.lang.Object[] values,
                                                                java.lang.String orderBy,
                                                                int firstResult,
                                                                int maxResults)
        Retrieves the result(s) matching the specified parameters.

        Returns either a List or an object depending on value of the unique parameter.

        Parameters:
        session - the Hibernate session to use
        clazz - the Class of object to retrieve, required must not be null
        properties - an array of fields name. All results are return if null or empty.
        values - an array of values to match, must be the same size as properties. All results are return if null or empty.
        orderBy - the names of the fields to be used to order the results (comma separated). You can append "asc" or "desc" to indicate the order direction. Default is ascending.
        firstResult - set the first data to retrieve. If <= 0, rows will be retrieved beginning from first data (does not work with query on super classes).
        maxResults - set the maximum number of data to retrieve. If < 0, there is no limit to the number of data retrieved (does not work with query on super classes).
        Returns:
        if unique is false, a List (never return null). if unique is true, an Object (may be null)
        Throws:
        java.lang.IllegalArgumentException - if clazz is null or if properties and values are not of the same length
        Since:
        jcms-6.0
      • buildQueryCriteria

        public static org.hibernate.Criteria buildQueryCriteria​(org.hibernate.Session session,
                                                                java.lang.Class<?> clazz,
                                                                java.lang.String[] properties,
                                                                java.lang.Object[] values,
                                                                java.lang.String orderBy,
                                                                int firstResult,
                                                                int maxResults,
                                                                boolean cacheable)
        Retrieves the result(s) matching the specified parameters.

        Returns either a List or an object depending on value of the unique parameter.

        Parameters:
        session - the Hibernate session to use
        clazz - the Class of object to retrieve, required must not be null
        properties - an array of fields name. All results are return if null or empty.
        values - an array of values to match, must be the same size as properties. All results are return if null or empty.
        orderBy - the names of the fields to be used to order the results (comma separated). You can append "asc" or "desc" to indicate the order direction. Default is ascending.
        firstResult - set the first data to retrieve. If <= 0, rows will be retrieved beginning from first data (does not work with query on super classes).
        maxResults - set the maximum number of data to retrieve. If < 0, there is no limit to the number of data retrieved (does not work with query on super classes).
        cacheable - if true set the criteria cacheable.
        Returns:
        if unique is false, a List (never return null). if unique is true, an Object (may be null)
        Throws:
        java.lang.IllegalArgumentException - if clazz is null or if properties and values are not of the same length
        Since:
        jcms-6.0
      • queryCollection

        public static <T> java.util.List<T> queryCollection​(java.lang.Class<? extends T> clazz,
                                                            java.lang.String property,
                                                            java.lang.Object value)
        Retreives the instance of the given class with the collection property matching the given value.
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required must not be null
        property - the collection field name
        value - the value to match
        Returns:
        a list of data
        Since:
        jcms-6.1.0
      • queryCollectionRowId

        public static <T> java.util.List<java.lang.Long> queryCollectionRowId​(java.lang.Class<? extends T> clazz,
                                                                              java.lang.String property,
                                                                              java.lang.Object value)
        Retreives the instance of the given class with the collection property matching the given value.
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required must not be null
        property - the collection field name
        value - the value to match
        Returns:
        a list of data
        Since:
        jcms-6.2.0
      • scrollCollection

        public static <T> org.hibernate.ScrollableResults scrollCollection​(java.lang.Class<? extends T> clazz,
                                                                           java.lang.String property,
                                                                           java.lang.Object value,
                                                                           boolean retreiveRowId)
        Scroll the instance of the given class with the collection property matching the given value.
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required must not be null
        property - the collection field name
        value - the value to match
        retreiveRowId - if true returns rowId instead of object
        Returns:
        a list of data
        Since:
        jcms-6.2.0
      • buildQueryCollection

        public static <T> org.hibernate.Query buildQueryCollection​(java.lang.Class<? extends T> clazz,
                                                                   java.lang.String property,
                                                                   java.lang.Object value,
                                                                   boolean retreiveRowId)
        Returns the Hibernate query to search the instance of the given class with the collection property matching the given value.
        Type Parameters:
        T - Hibernate class corresponding to a table in the database
        Parameters:
        clazz - the Class of object to retrieve, required must not be null
        property - the collection field name
        value - the value to match
        retreiveRowId - if true returns rowId instead of object
        Returns:
        a list of data
        Since:
        jcms-6.1.0
      • deleteQuery

        public static int deleteQuery​(java.lang.Class<?> clazz,
                                      java.lang.String property,
                                      java.lang.Object value)
        Delete all object matching the specified parameters.

        Example to delete all ReaderTracker of a publication

         HibernateUtil.deleteQuery(ReaderTracker.class, "publicationId", pub.getId());
         
        Parameters:
        clazz - the Class of object to retrieve and delete, required
        property - a field name, required
        value - the value of the field to match, required
        Returns:
        the number of objects deleted.
        Since:
        jcms-7.1.3
      • deleteQuery

        public static int deleteQuery​(java.lang.Class<?> clazz,
                                      java.lang.String[] properties,
                                      java.lang.Object[] values)
        Delete all object matching the specified parameters.

        Example to delete all ReaderTracker of a publication when the access count is 1

         HibernateUtil.deleteQuery(ReaderTracker.class, new String[] { "publicationId", "accessCount" }, new Object[] { pub.getId(), 1 }, true);
         
        Parameters:
        clazz - the Class of object to retrieve and delete, required
        properties - the fields name, required
        values - the value of the field to match, required
        Returns:
        the number of objects deleted.
        Since:
        jcms-7.1.3
      • deleteQuery

        public static int deleteQuery​(java.lang.Class<?> clazz,
                                      java.lang.String property,
                                      java.lang.Object value,
                                      boolean cleanSession)
        Delete all object matching the specified parameters.

        Example to delete all ReaderTracker of a publication

         HibernateUtil.deleteQuery(ReaderTracker.class, "publicationId", pub.getId());
         
        Parameters:
        clazz - the Class of object to retrieve and delete, required
        property - a field name, required
        value - the value of the field to match, required
        cleanSession - if true clean the session (i.e. flush/clear). Should be true unless you have others DB access to perform after this call.
        Returns:
        the number of objects deleted.
        Since:
        jcms-7.1.3
      • deleteQuery

        public static int deleteQuery​(java.lang.Class<?> clazz,
                                      java.lang.String[] properties,
                                      java.lang.Object[] values,
                                      boolean cleanSession)
        Delete all object matching the specified parameters.

        Example to delete all ReaderTracker of a publication when the access count is 1

         HibernateUtil.deleteQuery(ReaderTracker.class, new String[] { "publicationId", "accessCount" }, new Object[] { pub.getId(), 1 }, true);
         
        Parameters:
        clazz - the Class of object to retrieve and delete, required
        properties - the fields name, required
        values - the value of the field to match, required
        cleanSession - if true clean the session (i.e. flush/clear). Should be true unless you have others DB access to perform after this call.
        Returns:
        the number of objects deleted.
        Since:
        jcms-7.1.3
      • getDBDataList

        public static <T> java.util.List<T> getDBDataList​(java.lang.Class<T> clazz)
        Retrieve all Objects of the specified class from the database (limited to maxResults).
        Type Parameters:
        T - any DB type
        Parameters:
        clazz - the Class of object to retrieve, required
        Returns:
        a list of all object found in the database (never return null)
        Since:
        jcms-6.0
      • getDBDataList

        public static <T> java.util.List<T> getDBDataList​(java.lang.Class<T> clazz,
                                                          int firstResult,
                                                          int maxResults)
        Retrieve all Objects of the specified class from the database.
        Type Parameters:
        T - any DB type
        Parameters:
        clazz - the Class of object to retrieve, required
        firstResult - set the first data to retrieve. If <= 0, rows will be retrieved beginnning from first data (does not work with query on super classes).
        maxResults - set the maximum number of data to retrieve. If < 0, there is no limit to the number of data retrieved (does not work with query on super classes).
        Returns:
        a list of all object found in the database (never return null)
        Since:
        jcms-6.0
      • getDBDataList

        public static <T> java.util.List<T> getDBDataList​(java.lang.Class<T> clazz,
                                                          java.util.Collection<java.lang.Long> rowIdColl)
        Retrieve a List of Objects from their Class and rowId.

        Warning : Only use this method with a specific type class *WITHOUT ANY* descendant. Using this method with a "super type" (such as Publication.class) will result in a polymorphic query and may result in different instance of DBData with same row id being returned.
        For example, with arguments clazz=Publication.class and rowIdColl={42} you would retrive 42_MyType, 42_OtherType which is not usually expected !
        This method is only meant to work on one specific type (without subtype!)

        Type Parameters:
        T - any DB type
        Parameters:
        clazz - the Class of object to retrieve, required DO NOT use a super class
        rowIdColl - a collection of rowId
        Returns:
        a list of all object found in the database (never return null)
        Since:
        jcms-6.1.0
      • getDBDataIterator

        public static <T> java.util.Iterator<T> getDBDataIterator​(java.lang.Class<T> clazz)
        Retrieve all Objects of the specified class from the database.
        Type Parameters:
        T - any DB type
        Parameters:
        clazz - the Class of object to retrieve, required
        Returns:
        the result iterator
        Since:
        jcms-6.0
      • getRowIdBatchSet

        public static java.util.Set<java.util.Set<java.lang.Long>> getRowIdBatchSet​(java.util.Collection<java.lang.String> idColl,
                                                                                    int batchSize)
        Convenient method to convert a Collection of id into many smaller collections, allowing batch select using method getDBDataList(Class, Collection).

        Example :

         // HibernateUtil.beginTransaction(); already done HibernateSessionFilter for standard HTTP request
         
         // Retrieve DBMember id list from caddy
         List<String> dbMemberIdList = getCaddy().getDBMemberList();
         
         // Process DBMember in batch
         Set<Set<Long>> batchSet = HibernateUtil.getRowIdBatchSet(dbMemberIdList, -1)
         for (Set<Long> mbrRowIdSet : batchSet) {
         List<DBMember> dbmbrList = HibernateUtil.getDBDataList(DBMember.class, mbrRowIdSet);
            
         for (DBMember dbmbr : dbmbrList) {
         // dbmbr.set...
         HibernateUtil.save(dbmbr);
         }
            
         // Commit transaction on end of batch
         HibernateUtil.commitTransaction();
         HibernateUtil.beginTransaction();
         }
          
         // HibernateUtil.commitTransaction(); already done HibernateSessionFilter for standard HTTP request
         

        Warning : Only use this method with a collection of *only one without any descendant* type (eg 42_MyType, 666_MyType) Using this method with mixed type in source collection (eg 42_MyType, 66_OtherType, 42_OtherType) may result in conflicting rowid. This method is only meant to work on one specific type (excluding its subtype!).

        Parameters:
        idColl - a collection of jcmsid for DBData (e.g 42_YourType)
        batchSize - the size of subset to be create (defaut value DEFAULT_BATCH_SIZE is used if specified valued is less or equal 1)
        Returns:
        a Set containing subset of rowId.
        Since:
        jcms-6.1.0
      • getBatchSet

        public static java.util.Set<java.util.Set<java.lang.Long>> getBatchSet​(java.util.Collection<java.lang.Long> idColl,
                                                                               int batchSize)
        Convenient method to convert a Collection of rowId into many smaller collections, allowing batch select using method getDBDataList(Class, Collection).
        Parameters:
        idColl - a collection of rowId for DBData
        batchSize - the size of subset to be create (defaut value DEFAULT_BATCH_SIZE is used if specified value is less or equal 1)
        Returns:
        a Set containing subset of rowId.
        Since:
        jcms-7.0.2
        See Also:
        getRowIdBatchSet(Collection, int)
      • queryCountExact

        public static int queryCountExact​(java.lang.Class<?> clazz)
        Returns the count of objects matching the exact specified class, without using polymorphism.
        Parameters:
        clazz - the class
        Returns:
        the count of objects matching the given class.
        Since:
        jcms-9.0.3 - JCMS-5271
      • queryCount

        public static int queryCount​(java.lang.Class<?> clazz)
        Returns the count of objects matching the given class.
        Parameters:
        clazz - the class
        Returns:
        the count of objects matching the given class.
        Since:
        jcms-6.0.0
      • queryCount

        public static int queryCount​(java.lang.Class<?> clazz,
                                     java.lang.String property,
                                     java.lang.Object value)
        Returns the count of objects matching the given class with the given criteria.
        Parameters:
        clazz - the class
        property - a field name.
        value - the value of the field to match. All results are return if null.
        Returns:
        the count of objects matching the given class with the given criteria.
        Since:
        jcms-6.0.0
      • queryCount

        public static int queryCount​(java.lang.Class<?> clazz,
                                     java.lang.String[] properties,
                                     java.lang.Object[] values)
        Returns the count of objects matching the given class with the given criteria.
        Parameters:
        clazz - the class
        properties - an array of field name.
        values - an array of values of the field to match.
        Returns:
        the count of objects matching the given class with the given criteria.
        Since:
        jcms-6.0.0
      • queryCount

        public static int queryCount​(java.lang.Class<?> clazz,
                                     org.hibernate.criterion.Criterion criterion)
        Returns the count of objects matching the given class with the given criterion.
        Parameters:
        clazz - the class
        criterion - the criterion
        Returns:
        the count of objects matching the given class with the given criterion.
        Since:
        jcms-6.0.0
      • queryCount

        public static int queryCount​(org.hibernate.Criteria criteria)
        Returns the count of objects matching the given criteria.
        Parameters:
        criteria - the criteria
        Returns:
        the count of objects matching the given criteria.
        Since:
        jcms-6.2.0
      • queryCount

        public static int queryCount​(org.hibernate.Criteria criteria,
                                     boolean distinct)
      • queryPublication

        public static PageResult<Publication> queryPublication​(PublicationCriteria pubCriteria)
        Returns a list of publications in the database matching the given criteria.
        Parameters:
        pubCriteria - the PublicationCriteria (required, must not be null)
        Returns:
        a list of publications, never return null.
        Throws:
        java.lang.IllegalArgumentException - if pubCriteria is null
        Since:
        jcms-6.0.0
      • buildAndCriterion

        public static org.hibernate.criterion.Criterion buildAndCriterion​(org.hibernate.criterion.Criterion c1,
                                                                          org.hibernate.criterion.Criterion c2)
        Returns the AND of the two criterion. Check if criterion are null.
        Parameters:
        c1 - a criterion
        c2 - a criterion
        Returns:
        the AND of the two criterion. Check if criterion are null.
        Since:
        jcms-6.0.0
      • buildOrCriterion

        public static org.hibernate.criterion.Criterion buildOrCriterion​(org.hibernate.criterion.Criterion c1,
                                                                         org.hibernate.criterion.Criterion c2)
        Returns the OR of the two criterion. Check if criterion are null.
        Parameters:
        c1 - a criterion
        c2 - a criterion
        Returns:
        the OR of the two criterion. Check if criterion are null.
        Since:
        jcms-6.0.0
      • buildCollectionCriterion

        public static org.hibernate.criterion.Criterion buildCollectionCriterion​(java.lang.Class clazz,
                                                                                 java.lang.String property,
                                                                                 java.lang.String value)
        Apply a constraint on a value of the collection of the given clazz.
        Parameters:
        clazz - the entity class
        property - the name of the collection property
        value - the searched value
        Returns:
        a SQL restriction with the given parameters.
        Since:
        jcms-6.1.0
      • buildCollectionCriterion

        public static org.hibernate.criterion.Criterion buildCollectionCriterion​(java.lang.Class clazz,
                                                                                 java.lang.String property,
                                                                                 java.lang.Object value,
                                                                                 org.hibernate.type.Type valueType,
                                                                                 boolean equality)
        Apply a constraint on a value of the collection of the given clazz. Warning! This method does not support polymorphism. The given clazz must be an Hibernate mapped class.
        Parameters:
        clazz - the entity class. This class must be an Hibernate mapped class.
        property - the name of the collection property
        value - the searched value
        valueType - the type of the value (e.g. Hibernate.STRING)
        equality - if true search items with value equals to the given value else search items with value different to the given value.
        Returns:
        a SQL restriction with the given parameters.
        Since:
        jcms-6.1.0
      • buildCollectionCriterion

        public static org.hibernate.criterion.Criterion buildCollectionCriterion​(java.lang.String entityTable,
                                                                                 java.lang.String idColumn,
                                                                                 java.lang.String collectionTable,
                                                                                 java.lang.String itemIdColumn,
                                                                                 java.lang.String valueColumn,
                                                                                 java.lang.Object value,
                                                                                 org.hibernate.type.Type valueType,
                                                                                 boolean equality)
        Apply a constraint on a value of the collection of the given entity.
        Parameters:
        entityTable - the entity table name
        idColumn - the ID column name of the entity table
        collectionTable - the collection table name
        itemIdColumn - the ID column name of the collection table
        valueColumn - the name of the value column
        value - the searched value
        valueType - the type of the value (e.g. Hibernate.STRING)
        equality - if true search items with value equals to the given value else search items with value different to the given value.
        Returns:
        a SQL restriction with the given parameters.
        Since:
        jcms-6.1.0
      • buildInCriterion

        public static <T> org.hibernate.criterion.Criterion buildInCriterion​(java.lang.String propertyName,
                                                                             java.util.Collection<T> values)
        Returns an "in" criterion. If there are too many values, return a serie of in(...) or in (...) or in(...) or ...
        Parameters:
        propertyName - the name of the property to search in.
        values - the values
        Returns:
        an "in" criterion.
        Since:
        jcms-9.0.2
      • buildInCriterion

        public static <T> org.hibernate.criterion.Criterion buildInCriterion​(java.lang.String propertyName,
                                                                             java.util.Collection<T> values,
                                                                             int max)
        Returns an "in" criterion. If there are too many values, return a serie of in(...) or in (...) or in(...) or ...
        Parameters:
        propertyName - the name of the property to search in.
        values - the values
        max - the max item per "in" clause.
        Returns:
        an "in" criterion.
        Since:
        jcms-9.0.2
      • checkSQLInjection

        public static java.lang.String checkSQLInjection​(java.lang.String... strings)
        Checks if the given strings may contains an SQL injection.
        Parameters:
        strings - an array of String
        Returns:
        the String which contains a possible SQL injection or null if no SQL injection has been detected.
        Since:
        jcms-6.1.0
      • getObject

        public static java.lang.Object getObject​(java.lang.Class clazz,
                                                 java.lang.Long rowId)
        Retrieves the Object of the specified class and using the specified id.
        Parameters:
        clazz - the Class (or super class in case of inheritance) of the object to retrieve
        rowId - the primary key value of the object or if could not be found, the value of the "id" column
        Returns:
        the Object found in the database or null if no object matched the query.
        Since:
        jcms-6.0
      • getObject

        public static java.lang.Object getObject​(org.hibernate.Session session,
                                                 java.lang.Class clazz,
                                                 java.lang.Long rowId)
        Retrieves the Object of the specified class and using the specified id in the given session.
        Parameters:
        session - the session, must not be null (otherwise, null is returned)
        clazz - the Class (or super class in case of inheritance) of the object to retrieve, must not be null
        rowId - the primary key value of the object or if could not be found, the value of the "id" column, must not be null
        Returns:
        the Object found in the database or null if no object matched the query or if any parameter were null.
        Since:
        jcms-6.2.0
      • getDBData

        public static DBData getDBData​(java.lang.String id)
        Retrieves the DBData bound to the specified jcms id from the database.
        Parameters:
        id - the JCMS id of this data (e.g. 1234_WFNOTE)
        Returns:
        the DBData found in the database or null if no object matched the query.
        Since:
        jcms-6.0
      • parseJcmsId

        public static java.lang.Object[] parseJcmsId​(java.lang.String id)
        Returns the 2 component of the given JCMS ID.
        Parameters:
        id - the JCMS id
        Returns:
        an array of 2 components : the rowId (Long) and the class (Class)
        Since:
        jcms-6.2.0
      • getRowId

        public static java.lang.Long getRowId​(java.lang.String id)
        Retrieve the row id from a DBData id
        Parameters:
        id - the full DBData id as returned by dbdata.getId() (e.g 42_YourType)
        Returns:
        the rowId computed or null if it could not parsed
        Since:
        jcms-6.1.0
      • getData

        public static Data getData​(java.lang.String id)
        Retrieves the Data bound to the specified jcms id from the database.
        Parameters:
        id - the JCMS id of this data (e.g. 1234_WFNOTE)
        Returns:
        the Data found in the database or null if no object matched the query.
        Since:
        jcms-6.0.0
      • getCurrentObject

        public static java.lang.Object getCurrentObject​(java.lang.Class clazz,
                                                        java.lang.Long rowId)
        Return the current persisted state of the object with the given rowId.
        Parameters:
        clazz - the class of the object
        rowId - the rowId of the object
        Returns:
        the current persisted state of the object with the given id.
        Since:
        jcms-6.2.0
      • getCurrentDBData

        public static DBData getCurrentDBData​(java.lang.String id)
        Return the current persisted state of the DBData with the given id.
        Parameters:
        id - the JCMS id
        Returns:
        the current persisted state of the DBData with the given id.
        Since:
        jcms-6.2.0
      • getCurrentData

        public static Data getCurrentData​(java.lang.String id)
        Return the current persisted state of the Data with the given id.
        Parameters:
        id - the JCMS id
        Returns:
        the current persisted state of the Data with the given id.
        Since:
        jcms-6.2.0
      • getDate

        protected static java.util.Date getDate​(java.util.Date date)
        Return a new java.util.Date if the specified Date is a timestamp, otherwise return the date as is.
        Parameters:
        date - the date object to check
        Returns:
        a Date object or null if specified date was null, NEVER return a Timestamp
        Since:
        jcms-8.0.0
      • dateEquals

        public static boolean dateEquals​(java.util.Date date1,
                                         java.util.Date date2)
        Check if both date are equals, skipping any difference due to Timestamp implemantation.
        Parameters:
        date1 - the first Date to compare
        date2 - the second Date to compare
        Returns:
        true if date are equals (or both null), false otherwise
        Since:
        jcms-8.0.0
      • save

        public static void save​(Data data)
        Saves or updates the specified Data in the database.
        Parameters:
        data - the Data to be saved or updated
        Since:
        jcms-6.0
      • save

        public static void save​(java.lang.Object obj)
        Saves or updates the specified Object in the database.
        Parameters:
        obj - the object to be saved or updated
        Since:
        jcms-6.0
      • supportDateMillis

        public static boolean supportDateMillis()
        Returns true if the database supports millis for date.
        Returns:
        true if the database supports millis for date.
        Since:
        jcms-6.2.0
      • detectDatabaseFeatures

        public static void detectDatabaseFeatures()
        Check the features supported by the database.

        You do not need to invoke this method which is being invoked once at JPlatform startup.

        Since:
        jcms-10.0.3 / JCMS-7510
      • supportFullJoin

        public static boolean supportFullJoin()
        Returns true if the database supports full join.
        Returns:
        true if the database supports full join.
        Since:
        jcms-7.0.1
      • isVarcharInBytes

        public static boolean isVarcharInBytes()
        Returns true if the database count varchar length in bytes (i.e. varchar(255) = 255 bytes, not 255 UTF-8 chars !)
        Returns:
        true if the database count varchar length in bytes (i.e. varchar(255) = 255 bytes, not 255 UTF-8 chars !)
        Since:
        jcms-8.0.0
      • getCurrentDate

        public static java.util.Date getCurrentDate()
        Returns a new date. The millis are truncated or not according the database support of millis.
        Returns:
        a new date.
        Since:
        jcms-6.2.0
      • evict

        public static void evict​(java.lang.Object obj)
        Removes this instance from the Hibernate session cache to avoid automatic persistence by dirty checking.
        Parameters:
        obj - the object to be removed
        Since:
        jcms-6.0.0
        See Also:
        Session.evict(Object)
      • delete

        public static void delete​(DBData data,
                                  boolean cleanSession)
        Deletes the specified object in the database.
        Parameters:
        data - the data to be deleted
        cleanSession - if true clean the session
        Since:
        jcms-6.1.1
      • delete

        public static void delete​(DBData data)
        Deletes the specified object in the database.
        Parameters:
        data - the data to be deleted
        Since:
        jcms-6.0
      • delete

        public static void delete​(java.lang.String id)
        Deletes the specified object in the database.
        Parameters:
        id - the identifier of the DBData to be deleted
        Since:
        jcms-6.0
      • clearCache

        public static void clearCache()
      • removeSecondLevelCacheEntry

        public static void removeSecondLevelCacheEntry​(java.lang.String entityName,
                                                       java.lang.Long rowId)
        Removes a DBData from the second level cache.

        Synchronization is handled within the method.

        Parameters:
        entityName - the id of the DBData to remove
        rowId - the rowId of the DBData to remove
        Throws:
        java.lang.IllegalStateException - if the cache is not Status.STATUS_ALIVE
        Since:
        jcms-7.0.0
      • removeSecondLevelCacheEntry

        public static void removeSecondLevelCacheEntry​(java.lang.String id)
        Removes a DBData from the second level cache.
        Parameters:
        id - the id of the DBData to remove.
        Since:
        jcms-10.0.0
      • scroll

        public static org.hibernate.ScrollableResults scroll​(java.lang.Class clazz)
        Scroll over a class. Scroll in forward only.
        Parameters:
        clazz - the class to scroll over.
        Returns:
        a ScrollableResults
        Since:
        jcms-6.1.0
      • scroll

        public static org.hibernate.ScrollableResults scroll​(java.lang.Class clazz,
                                                             org.hibernate.ScrollMode scrollMode)
        Scroll over a class with a given scroll mode.
        Parameters:
        clazz - the class to scroll over.
        scrollMode - Indicates the type of underlying database cursor to request.
        Returns:
        a ScrollableResults
        Since:
        jcms-6.2.0
      • truncateVarchar

        public static java.lang.String truncateVarchar​(java.lang.String value)
        Returns the value truncated to the varchar length (i.e. 255 chars)
        Parameters:
        value - the value to be truncated
        Returns:
        the value truncated to the varchar length (i.e. 255 chars)
        Since:
        jcms-8.0.0
      • supportClobCollectionUpdate

        public static boolean supportClobCollectionUpdate()
        Returns true if the database supports updating collection of CLOB using a where clause as opposed to specifying a completely new set of values.
        Returns:
        true if the database supports updating collection of CLOB.
        Since:
        JCMS-6908 / DEVJCMS-2961
      • updateCollection

        public static <T> java.util.List<T> updateCollection​(java.util.List<T> listToUpdate,
                                                             java.util.List<T> newValues,
                                                             boolean isLargeText)
        Return an updated List enforcing constraint required by Hibernate and current database
        Parameters:
        listToUpdate - the list being updated (null accepted)
        newValues - the new values that should be used in the returned List (null accepted)
        isLargeText - true when collection contains large text (ie. CLOB), false for any other value type
        Returns:
        an udpated List : might be a List new intance containing new values, or the original listToUpdate updated with the new values, depending on circumstances. Never return null.
        Since:
        JCMS-6908 / DEVJCMS-2961
      • updateCollection

        public static <T> java.util.Set<T> updateCollection​(java.util.Set<T> setToUpdate,
                                                            java.util.Set<T> newValues,
                                                            boolean isLargeText)
        Return an updated Set enforcing constraint required by Hibernate and current database
        Parameters:
        setToUpdate - the list being updated (null accepted)
        newValues - the new values that should be used in the returned Set (null accepted)
        isLargeText - true when collection contains large text (ie. CLOB), false for any other value type
        Returns:
        an udpated Set : might be a Set new intance containing new values, or the original setToUpdate updated with the new values, depending on circumstances. Never return null.
        Since:
        JCMS-6908 / DEVJCMS-2961
      • excludeFromCommit

        public static void excludeFromCommit​(java.lang.Object entity,
                                             boolean exclude)
        Add or remove the specified object to internal collection of entity to be evicted right before the next commit.

        This method is public due to existing JCMS packages organisation, however its usage is restricted for internal use.

        Parameters:
        entity - any Object to exclude/restore
        exclude - true to exclude the object, false to restore default behavior
        Since:
        jcms-10.0.2 / JCMS-6645
      • getCdateFromEventState

        public static java.util.Date getCdateFromEventState​(java.lang.Object[] state)
        Parameters:
        state - the event state
        Returns:
        the cdate contained in the event state.
        Since:
        jcms-10.0.7
      • getMdateFromEventState

        public static java.util.Date getMdateFromEventState​(java.lang.Object[] state)
        Parameters:
        state - the event state
        Returns:
        the mdate contained in the event state.
        Since:
        jcms-10.0.7
      • getAuthorFromEventState

        public static Member getAuthorFromEventState​(java.lang.Object[] state)
        Parameters:
        state - the event state
        Returns:
        the author contained in the event state.
        Since:
        jcms-10.0.7
      • getDataFromEventState

        public static <T extends Data> T getDataFromEventState​(java.lang.Object[] state,
                                                               java.lang.Class<T> clazz,
                                                               int fieldIndex)
        Parameters:
        state - the event state
        clazz - the class of the data
        fieldIndex - the index of the data in the event state
        Returns:
        the data contained in the event state.
        Since:
        jcms-10.0.7
      • getObjectFromEventState

        public static <T> T getObjectFromEventState​(java.lang.Object[] state,
                                                    java.lang.Class<T> clazz,
                                                    int fieldIndex)
        Parameters:
        state - the event state
        clazz - the class of the object
        fieldIndex - the index of the object in the event state
        Returns:
        the object contained in the event state.
        Since:
        jcms-10.0.7