Example usage for org.hibernate.transform PassThroughResultTransformer PassThroughResultTransformer

List of usage examples for org.hibernate.transform PassThroughResultTransformer PassThroughResultTransformer

Introduction

In this page you can find the example usage for org.hibernate.transform PassThroughResultTransformer PassThroughResultTransformer.

Prototype

private PassThroughResultTransformer() 

Source Link

Document

Disallow instantiation of PassThroughResultTransformer.

Usage

From source file:net.digitalprimates.persistence.translators.hibernate.HibernateSerializer.java

License:Open Source License

/**
 * Query the database and get a result set of IDS that belong to a specific
 * collection/*from w  w  w  . j a v a 2s .  c  om*/
 * 
 * @return
 */
private List getPkIds(SessionImplementor session, CollectionPersister persister,
        PersistentCollection collection) throws ClassNotFoundException {
    AbstractCollectionPersister absPersister = (AbstractCollectionPersister) persister;
    String[] keyNames;

    if (absPersister.isOneToMany() || absPersister.isManyToMany()) {
        keyNames = absPersister.getElementColumnNames();
    } else {
        keyNames = absPersister.getKeyColumnNames();
    }
    //String[] columnNames = absPersister.getElementColumnNames();

    SimpleSelect pkSelect = new SimpleSelect(((SessionImpl) session).getFactory().getDialect());
    pkSelect.setTableName(absPersister.getTableName());
    pkSelect.addColumns(keyNames);
    pkSelect.addCondition(absPersister.getKeyColumnNames(), "=?");

    String sql = pkSelect.toStatementString();
    List results = new ArrayList();

    try {
        // int size = absPersister.getSize(collection.getKey(), eventSession);
        Query q2 = ((SessionImpl) session).createSQLQuery(sql).setParameter(0, collection.getKey())
                .setResultTransformer(new PassThroughResultTransformer());

        List hibernateResults = q2.list();
        //return results;

        Type t = persister.getKeyType();

        PreparedStatement stmt = ((SessionImpl) session).connection().prepareStatement(sql);
        if (t instanceof StringType) {
            stmt.setString(1, collection.getKey().toString());
        } else {
            stmt.setObject(1, new Integer(collection.getKey().toString()).intValue());
        }

        ResultSet keyResults = stmt.executeQuery();

        while (keyResults.next()) {
            results.add(keyResults.getObject(1));
        }

    } catch (Exception ex) {
        ex.printStackTrace();
    }

    return results;
}

From source file:org.eurocarbdb.dataaccess.indexes.IndexByMostEvidence.java

License:Open Source License

public void apply(Criteria query) {
    /*  /*from w w w.ja  va2  s . c o  m*/
    *   the query for this index requires a horrible hibernate hack.
    *   basically, the incoming Criteria query depends on an SQL 
    *   'group by', which, due to Hibernate limitations, screws over 
    *   the select clause. So, we attach a results transformer to the
    *   query that post-processes the result set from a list of 
    *   GlycanSequence ids into GlycanSequence objects through a
    *   separate query.
    */
    query.createAlias("glycanEvidence", "gs2ev", LEFT_JOIN)
            .setProjection(Projections.projectionList().add(Projections.groupProperty("glycanSequenceId"))
                    .add(Projections.count("gs2ev.evidence").as("ev")))
            .addOrder(Order.desc("ev")).setResultTransformer(new PassThroughResultTransformer() {
                public List transformList(List results) {
                    if (results == null || results.size() == 0)
                        return results;

                    List<Object[]> rows = (List<Object[]>) results;

                    //  the lookup hash
                    Map<Integer, GlycanSequence> hash = new HashMap<Integer, GlycanSequence>(results.size());

                    //  gather the sequence ids 
                    List<Integer> ids = new ArrayList<Integer>(results.size());
                    for (Object[] columns : rows)
                        ids.add((Integer) columns[0]);

                    //  look them up
                    List<GlycanSequence> seqs = (List<GlycanSequence>) getEntityManager()
                            .createQuery(GlycanSequence.class).add(Restrictions.in("glycanSequenceId", ids))
                            .setFetchSize(ids.size())
                            // .setCacheable( true )
                            .list();

                    for (GlycanSequence seq : seqs)
                        hash.put(seq.getGlycanSequenceId(), seq);

                    seqs.clear();

                    for (Integer id : ids)
                        seqs.add(hash.get(id));

                    return seqs;
                }
                /*
                    public Object transformTuple( Object[] tuple, String[] aliases )
                    {
                        int id = (Integer) tuple[0];
                        return getEntityManager().lookup( GlycanSequence.class, id );
                    }
                */
            });

    /* // attempt 2
            query
    .createAlias("glycanEvidence", "gs2ev", LEFT_JOIN ) 
    .addOrder( 
        new Order( "irrelevant", false ) 
        {
            public final String toSqlString( Criteria c, CriteriaQuery q )
            {
                // return "count( gs2ev.evidence_id ) desc";       
                return "count( "
                    + "gs2ev1_"//q.getSQLAlias( query, "glycanEvidence" )
                    + ".evidence_id ) desc";       
            }
        }
    )
            ;
    */
    /* // attempt 3
            query
    .createAlias("glycanEvidence", "gs2ev", LEFT_JOIN )  
    .setProjection( 
        Projections.groupProperty("glycanSequenceId").as("glycanSequenceId")
    )
    .addOrder( 
        new Order( "irrelevant", false ) 
        {
            public final String toSqlString( Criteria c, CriteriaQuery q )
            {
                // return "count( gs2ev.evidence_id ) desc";       
                return "count( "
                    + "gs2ev1_"//q.getSQLAlias( query, "glycanEvidence" )
                    + ".evidence_id ) desc";       
            }
        }
    )
    .setResultTransformer( 
        org.hibernate.transform.Transformers.aliasToBean( 
            GlycanSequence.class ) ) 
            ;
    */
}