List of usage examples for org.hibernate.transform PassThroughResultTransformer PassThroughResultTransformer
private PassThroughResultTransformer()
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 ) ) ; */ }